From 77e0766b20d57cce4a4b777db20df5e0d25950a4 Mon Sep 17 00:00:00 2001 From: wyj2080 <1603068044@qq.com> Date: Mon, 20 Apr 2020 10:35:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E6=A6=82=E8=A7=88=E5=90=8E?= =?UTF-8?q?=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CustomerViewController.java | 14 +- .../entity/CustomerViewCompanyVO.java | 24 ++ .../customer/entity/CustomerViewShopVO.java | 27 ++ .../ic/customer/entity/CustomerViewVO.java | 57 ++-- .../entity/CustomerViewZeroExtendVO.java | 23 ++ .../kiisoo/ic/customer/entity/OpCustomer.java | 12 + .../customer/mapper/OpCustomerDOMapper.java | 12 +- .../ic/customer/mapper/OpVipDOMapper.java | 5 + .../customer/service/CustomerViewService.java | 296 +++++++++++------- .../resources/mapper/OpCustomerDOMapper.xml | 38 ++- src/main/resources/mapper/OpVipDOMapper.xml | 19 ++ 11 files changed, 382 insertions(+), 145 deletions(-) create mode 100644 src/main/java/com/kiisoo/ic/customer/entity/CustomerViewCompanyVO.java create mode 100644 src/main/java/com/kiisoo/ic/customer/entity/CustomerViewShopVO.java create mode 100644 src/main/java/com/kiisoo/ic/customer/entity/CustomerViewZeroExtendVO.java diff --git a/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java b/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java index 151d1d6..02c5da4 100644 --- a/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java +++ b/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java @@ -34,18 +34,18 @@ public class CustomerViewController extends BaseController { /** * 客户概览main * @param userId 用户id - * @param organizationId 零售公司id - * @param shopId 店铺id - * @param sevenDayStartTime 近七天开始时间 - * @param sevenDayEndTime 近七天结束时间 + * @param selectStartTime 选中开始时间 + * @param selectEndTime 选中结束时间 + * @param startTime 柱状图开始时间 + * @param endTime 柱状图结束时间 * @return 客户概览VO */ @ResponseBody @RequestMapping(value = "/main", method = RequestMethod.GET) - public Map getMainData(@RequestParam("userId")Long userId, Long organizationId, Long shopId, - @RequestParam("sevenDayStartTime")String sevenDayStartTime, @RequestParam("sevenDayEndTime")String sevenDayEndTime){ + public Map getMainData(@RequestParam("userId")Long userId, @RequestParam("selectStartTime")String selectStartTime, @RequestParam("selectEndTime")String selectEndTime, + @RequestParam("startTime")String startTime, @RequestParam("endTime")String endTime){ try{ - CustomerViewVO result = customerViewService.selectCustomerViewMain(userId, organizationId, shopId, sevenDayStartTime, sevenDayEndTime); + CustomerViewVO result = customerViewService.selectCustomerViewMain(userId, selectStartTime, selectEndTime, startTime, endTime); return data(result); }catch (Exception e){ log.error("查询客户数据概览出错", e); diff --git a/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewCompanyVO.java b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewCompanyVO.java new file mode 100644 index 0000000..fb6da48 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewCompanyVO.java @@ -0,0 +1,24 @@ +package com.kiisoo.ic.customer.entity; + +import lombok.Data; + + +/** + * @Description: 客户概览,零售公司新增VO + * @Author: wangyinjia + * @Date: 2020/4/17 + * @Company: kiisoo + * @Version: 1.0 + */ +@Data +public class CustomerViewCompanyVO { + /**排名*/ + private Integer position; + /**零售公司id*/ + private Long orgId; + /**零售公司名称*/ + private String orgName; + /**新增好友数*/ + private Integer newCustomerCount; + +} diff --git a/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewShopVO.java b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewShopVO.java new file mode 100644 index 0000000..ea1bba2 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewShopVO.java @@ -0,0 +1,27 @@ +package com.kiisoo.ic.customer.entity; + +import lombok.Data; + + +/** + * @Description: 客户概览,店铺新增VO + * @Author: wangyinjia + * @Date: 2020/4/17 + * @Company: kiisoo + * @Version: 1.0 + */ +@Data +public class CustomerViewShopVO { + /**排名*/ + private Integer position; + /**店铺id*/ + private Long shopId; + /**店铺名称*/ + private String shopName; + /**零售公司id*/ + private Long orgId; + /**零售公司名称*/ + private String orgName; + /**新增好友数*/ + private Integer newCustomerCount; +} diff --git a/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewVO.java b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewVO.java index df6f04e..c5ba9ea 100644 --- a/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewVO.java +++ b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewVO.java @@ -14,42 +14,47 @@ import java.util.List; */ @Data public class CustomerViewVO { - /**全部客户*/ - private Long allCustomer; - /**有效客户*/ - private Long validCustomer; - /**新增客户*/ + /**新增好友*/ private Long newCustomer; - /**新增有效客户*/ + /**新增好友(去重)*/ private Long newValidCustomer; - /**删除拉黑数*/ - private Long deleteCustomer; + /**全部好友*/ + private Long allCustomer; + /**全部好友(去重)*/ + private Long allValidCustomer; + /**删除拉黑数(累计去重)*/ + private Long validDeleteCustomer; + /**会员总数*/ + private Long allVipCount; + + /**好友list*/ + List customerList; + /**好友(去重)list*/ + List validCustomerList; + + /**零售公司新增top10*/ + List orgNewCustomerList; + /**店铺新增top10*/ + List shopNewCustomerList; + /**零推广list*/ + List zeroExtendList; - /**近七天新增客户list*/ - List sevenDayCustomerList; - /**近七天新增会员list*/ - List sevenDayVipList; - /**未关联的客户*/ - private Long customer; - /**已关联人数*/ - private Long common; - /**未关联的会员*/ - private Long vip; /** * 初始化 */ public CustomerViewVO(){ - allCustomer = 0L; - validCustomer = 0L; newCustomer = 0L; newValidCustomer = 0L; - deleteCustomer = 0L; - customer = 0L; - common = 0L; - vip = 0L; - sevenDayCustomerList = new ArrayList<>(); - sevenDayVipList = new ArrayList<>(); + allCustomer = 0L; + allValidCustomer = 0L; + validDeleteCustomer = 0L; + allVipCount = 0L; + customerList = new ArrayList<>(); + validCustomerList = new ArrayList<>(); + orgNewCustomerList = new ArrayList<>(); + shopNewCustomerList = new ArrayList<>(); + zeroExtendList = new ArrayList<>(); } } diff --git a/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewZeroExtendVO.java b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewZeroExtendVO.java new file mode 100644 index 0000000..d63ddd8 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/customer/entity/CustomerViewZeroExtendVO.java @@ -0,0 +1,23 @@ +package com.kiisoo.ic.customer.entity; + +import lombok.Data; + + +/** + * @Description: 客户概览,零推广VO + * @Author: wangyinjia + * @Date: 2020/4/17 + * @Company: kiisoo + * @Version: 1.0 + */ +@Data +public class CustomerViewZeroExtendVO { + /**零售公司id*/ + private Long orgId; + /**零售公司名称*/ + private String orgName; + /**店铺总数*/ + private Integer allShopCount; + /**零推广店铺数*/ + private Integer zeroShopCount; +} diff --git a/src/main/java/com/kiisoo/ic/customer/entity/OpCustomer.java b/src/main/java/com/kiisoo/ic/customer/entity/OpCustomer.java index b35d009..96b1c41 100644 --- a/src/main/java/com/kiisoo/ic/customer/entity/OpCustomer.java +++ b/src/main/java/com/kiisoo/ic/customer/entity/OpCustomer.java @@ -104,4 +104,16 @@ public class OpCustomer { @TableField(exist = false) private Date registerTime; + /** + * 店铺id + */ + @TableField(exist = false) + private Long shopId; + + /** + * 是否有效1有效2无效 + */ + @TableField(exist = false) + private Integer validType; + } diff --git a/src/main/java/com/kiisoo/ic/customer/mapper/OpCustomerDOMapper.java b/src/main/java/com/kiisoo/ic/customer/mapper/OpCustomerDOMapper.java index 65b6fda..b50f646 100644 --- a/src/main/java/com/kiisoo/ic/customer/mapper/OpCustomerDOMapper.java +++ b/src/main/java/com/kiisoo/ic/customer/mapper/OpCustomerDOMapper.java @@ -1,6 +1,7 @@ package com.kiisoo.ic.customer.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.kiisoo.ic.customer.entity.CustomerViewShopVO; import com.kiisoo.ic.customer.entity.OpCustomer; import com.kiisoo.ic.customer.bean.OpCustomerDTO; import org.apache.ibatis.annotations.Param; @@ -38,7 +39,16 @@ public interface OpCustomerDOMapper extends BaseMapper { /** * 客户list */ - List selectCustomerList(@Param("shopIds") List shopIds, @Param("sellerId") Long sellerId, @Param("memberId") Long memberId, @Param("startDate") Date startDate, @Param("endDate") Date endDate); + List selectCustomerList(@Param("shopIds") List shopIds, @Param("sellerId") Long sellerId, @Param("memberId") Long memberId, @Param("startDate") String startDate, @Param("endDate") String endDate); + /** + * 客户总数 + */ + Long selectCustomerCount(@Param("shopIds") List shopIds, @Param("type")Integer type, @Param("startDate") String startDate, @Param("endDate") String endDate); + + /** + * 店铺ids→零售公司 + */ + List selectOrgByShopIds(@Param("shopIds") List shopIds); } diff --git a/src/main/java/com/kiisoo/ic/customer/mapper/OpVipDOMapper.java b/src/main/java/com/kiisoo/ic/customer/mapper/OpVipDOMapper.java index 8ab4158..84ba3d9 100644 --- a/src/main/java/com/kiisoo/ic/customer/mapper/OpVipDOMapper.java +++ b/src/main/java/com/kiisoo/ic/customer/mapper/OpVipDOMapper.java @@ -17,4 +17,9 @@ public interface OpVipDOMapper extends BaseMapper { * 会员list */ List selectVipList(@Param("shopIds") List shopIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate); + + /** + * 会员总数 + */ + Long selectVipCount(@Param("shopIds") List shopIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate); } diff --git a/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java b/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java index 77a1a4f..ebfef11 100644 --- a/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java +++ b/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java @@ -1,21 +1,22 @@ package com.kiisoo.ic.customer.service; -import com.kiisoo.ic.customer.entity.CustomerViewVO; -import com.kiisoo.ic.customer.entity.OpCustomer; -import com.kiisoo.ic.customer.entity.OpVip; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.kiisoo.ic.customer.entity.*; import com.kiisoo.ic.customer.mapper.OpCustomerDOMapper; import com.kiisoo.ic.customer.mapper.OpVipDOMapper; import com.kiisoo.ic.domain.service.PrivilageDomainService; +import com.kiisoo.ic.generalize.entity.PoiCustomerContactDataStat; +import com.kiisoo.ic.generalize.mapper.PoiCustomerContactDataStatMapper; import com.kiisoo.ic.store.entity.PoiStore; -import com.kiisoo.ic.store.service.PoiStoreService; +import com.kiisoo.ic.store.mapper.PoiStoreDOMapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicLong; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -29,8 +30,10 @@ import java.util.stream.Collectors; @Service public class CustomerViewService { - /**零*/ - static final Long ZERO_L= 0L; + /**有效*/ + static final Integer VALID = 1; + + static final Integer TEN = 10; /** * 用户权限mapper @@ -42,7 +45,7 @@ public class CustomerViewService { * 店铺mapper */ @Autowired - private PoiStoreService poiStoreService; + private PoiStoreDOMapper poiStoreDOMapper; /** * 客户mapper @@ -50,6 +53,12 @@ public class CustomerViewService { @Autowired private OpCustomerDOMapper opCustomerDOMapper; + /** + * 拉黑mapper + */ + @Autowired + private PoiCustomerContactDataStatMapper poiCustomerContactDataStatMapper; + /** * vip mapper */ @@ -59,137 +68,204 @@ public class CustomerViewService { /** * 客户概览main * @param userId 用户id - * @param organizationId 零售公司id - * @param shopId 店铺id - * @param sevenDayStartTime 近七天开始时间 - * @param sevenDayEndTime 近七天结束时间 + * @param selectStartTime 选中开始时间 + * @param selectEndTime 选中结束时间 + * @param startTime 柱状图开始时间 + * @param endTime 柱状图结束时间 * @return 客户概览VO */ - public CustomerViewVO selectCustomerViewMain(Long userId, Long organizationId, Long shopId, String sevenDayStartTime, String sevenDayEndTime){ + public CustomerViewVO selectCustomerViewMain(Long userId, String selectStartTime, String selectEndTime, String startTime, String endTime){ CustomerViewVO customerViewVO = new CustomerViewVO(); //shopIds -// List shopIds = getShopIds(userId, regionId, shopId); - List shopIds = new ArrayList<>(); - //客户list - List customerList = opCustomerDOMapper.selectCustomerList(shopIds, null, null, null, null); - //会员list - List vipList = opVipDOMapper.selectVipList(shopIds, null, null); - - //5大块客户数 - - //设置客户,关联,vip人数 - setCustomerAndVipSize(customerList, vipList, customerViewVO); - //近七天新增list - List sevenDayCustomerList = customerList.stream().filter(customerDO -> filterSevenDayCustomer(customerDO, sevenDayStartTime, sevenDayEndTime)).collect(Collectors.toList()); - List sevenDayVipList = vipList.stream().filter(vipDO -> filterSevenDayVip(vipDO, sevenDayStartTime, sevenDayEndTime)).collect(Collectors.toList()); - customerViewVO.setSevenDayCustomerList(sevenDayCustomerList); - customerViewVO.setSevenDayVipList(sevenDayVipList); + List shopIds = getShopIds(userId); + if(CollectionUtils.isEmpty(shopIds)){ + return customerViewVO; + } + //柱状图好友list + List customerList = opCustomerDOMapper.selectCustomerList(shopIds, null, null, startTime, endTime); + //好友总数 + Long customerCount = opCustomerDOMapper.selectCustomerCount(shopIds, null, null, null); + //好友总数(去重) + Long validCustomerCount = opCustomerDOMapper.selectCustomerCount(shopIds, VALID, null, null); + //删除拉黑数 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.in("store_id", shopIds).le("stat_time", selectEndTime).ge("stat_time", selectStartTime); + Long validDeleteCustomerCount = poiCustomerContactDataStatMapper.selectList(wrapper).stream() + .filter(contactDO -> contactDO.getNegativeFeedbackCnt() != null) + .map(PoiCustomerContactDataStat::getNegativeFeedbackCnt).mapToLong(a -> a).sum(); + //会员总数 + Long vipCount = opVipDOMapper.selectVipCount(shopIds, null, null); + + //柱状图list + List validCustomerList = customerList.stream().filter(customerDO -> VALID.equals(customerDO.getValidType())).collect(Collectors.toList()); + customerViewVO.setCustomerList(customerList); + customerViewVO.setValidCustomerList(validCustomerList); + //设置新增好友,好友总数,拉黑数,vip人数,柱状图list等数据 + setCustomerViewData(customerViewVO, customerCount, validCustomerCount, validDeleteCustomerCount, vipCount, customerList, validCustomerList, selectStartTime, selectEndTime); + //前十名排行list等 + List newCustimerList = customerList.stream().filter(customerDO -> filterCustomerByRegisterTime(customerDO, selectStartTime, selectEndTime)).collect(Collectors.toList()); + List orgNewCustomerList = getOrgNewCustomerList(newCustimerList); + List shopNewCustomerList = getShopNewCustomerList(newCustimerList); + List zeroExtendList = getZeroExtendList(newCustimerList, shopIds); + customerViewVO.setOrgNewCustomerList(orgNewCustomerList); + customerViewVO.setShopNewCustomerList(shopNewCustomerList); + customerViewVO.setZeroExtendList(zeroExtendList); return customerViewVO; } /** * shopIds * @param userId 用户id - * @param regionId 区域id - * @param shopId 店铺id * @return shopIds */ - List getShopIds(Long userId, Long regionId, Long shopId){ - List shopIds = new ArrayList<>(); - //单店 - if(shopId != null){ - shopIds.add(shopId); - return shopIds; - } - //单区域 - if(regionId != null){ - List shopList = poiStoreService.getRegionShop(regionId); - shopIds = shopList.stream().map(PoiStore::getId).collect(Collectors.toList()); - return shopIds; - } - //所有shopIds - shopIds = privilageDomainService.listUserDatePermission(userId); + List getShopIds(Long userId){ + List shopIds = privilageDomainService.listUserDatePermission(userId); return shopIds; } /** - * 客户,关联,vip人数 - * @param customerList 客户List - * @param vipList vipList + * 新增好友,好友总数,拉黑数,vip人数,柱状图list等数据 * @param customerViewVO 客户概览VO + * @param customerCount 好友总数 + * @param validCustomerCount 好友总数(去重) + * @param validDeleteCustomerCount 删除来黑数(累计去重) + * @param vipCount 会员总数 + * @param customerList 新增好友list + * @param validCustomerList 新增好友(去重)list + * @param selectStartTime 选中开始时间 + * @param selectEndTime 选中结束时间 */ - public void setCustomerAndVipSize(List customerList, List vipList, CustomerViewVO customerViewVO){ - //关联人数(手机号确定) - List customerPhoneList = customerList.stream().map(OpCustomer::getPhone).distinct().collect(Collectors.toList()); - List vipPhoneList = vipList.stream().map(OpVip::getPhone).distinct().collect(Collectors.toList()); - AtomicLong commonInt = new AtomicLong(0); - customerPhoneList.forEach(customerPhone -> { - if(vipPhoneList.contains(customerPhone)){ - commonInt.incrementAndGet(); - } - }); - Long common = commonInt.get(); - customerViewVO.setCommon(common); - //未关联的客户数 - Long customer = customerList.stream().filter(customerDO -> ZERO_L.equals(customerDO.getMemberId())).map(OpCustomer::getPhone).distinct().count(); - customerViewVO.setCustomer(customer); - //未关联会员数 - Long vip = vipList.stream().map(OpVip::getPhone).distinct().count(); - customerViewVO.setVip(vip - common); + public void setCustomerViewData(CustomerViewVO customerViewVO, Long customerCount, Long validCustomerCount, Long validDeleteCustomerCount, Long vipCount, + List customerList, List validCustomerList, String selectStartTime, String selectEndTime){ + //新增好友 + Long newCustomerCount = customerList.stream().filter(customerDO -> filterCustomerByRegisterTime(customerDO, selectStartTime, selectEndTime)).count(); + customerViewVO.setNewCustomer(newCustomerCount); + //新增好友(去重) + Long newValidCustomerCount = validCustomerList.stream().filter(customerDO -> filterCustomerByRegisterTime(customerDO, selectStartTime, selectEndTime)).count(); + customerViewVO.setNewValidCustomer(newValidCustomerCount); + //好友总数 + customerViewVO.setAllCustomer(customerCount); + //好友总数(去重) + customerViewVO.setAllValidCustomer(validCustomerCount); + //删除拉黑数(累计去重) + customerViewVO.setValidDeleteCustomer(validDeleteCustomerCount); + //会员总数 + customerViewVO.setAllVipCount(vipCount); + } /** - * 过滤客户list - * @param customerDO 客户DO - * @param sevenDayStartTime 开始时间 - * @param sevenDayEndTime 结束时间 - * @return 客户list + * 选中时间过滤客户 + * @param customerDO 好友DO + * @param selectStartTime 选中开始时间 + * @param selectEndTime 选中结束时间 + * @return true/false */ - Boolean filterSevenDayCustomer(OpCustomer customerDO, String sevenDayStartTime, String sevenDayEndTime){ + boolean filterCustomerByRegisterTime(OpCustomer customerDO, String selectStartTime, String selectEndTime){ + Date registerDate = customerDO.getRegisterTime(); + if(registerDate == null){ + return false; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { - if(customerDO.getRegisterTime() != null){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Long start = sdf.parse(sevenDayStartTime).getTime(); - Long end = sdf.parse(sevenDayEndTime).getTime(); - if(customerDO.getRegisterTime().getTime() >= start && customerDO.getRegisterTime().getTime() <= end){ - return true; - }else{ - return false; - } - }else{ - return false; - } + long startTime = sdf.parse(selectStartTime).getTime(); + long endTime = sdf.parse(selectEndTime).getTime(); + long registerTime = registerDate.getTime(); + return startTime <= registerTime && endTime >= registerTime; }catch (Exception e){ - log.error("过滤近7天客户出错", e); + log.error("格式化时间出错", e); return false; } } /** - * 过滤会员list - * @param vipDO 会员DO - * @param sevenDayStartTime 开始时间 - * @param sevenDayEndTime 结束时间 - * @return 会员list + * 零售公司新增排行list + * @param newCustimerList 新增好友list + * @return 零售公司新增排行list */ - Boolean filterSevenDayVip(OpVip vipDO, String sevenDayStartTime, String sevenDayEndTime){ - try { - if(vipDO.getRegisterTime() != null){ - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Long start = sdf.parse(sevenDayStartTime).getTime(); - Long end = sdf.parse(sevenDayEndTime).getTime(); - if(vipDO.getRegisterTime().getTime() >= start && vipDO.getRegisterTime().getTime() <= end){ - return true; - }else{ - return false; - } - }else{ - return false; - } - }catch (Exception e){ - log.error("过滤近7天会员出错", e); - return false; + List getOrgNewCustomerList(List newCustimerList){ + List orgNewCustomerList = new ArrayList<>(); + //店铺id-新增好友数map + Map shopIdCountMap = newCustimerList.stream().collect(Collectors.groupingBy(OpCustomer::getShopId, Collectors.counting())); + //店铺id→零售公司名称 + List shopIds = newCustimerList.stream().map(OpCustomer::getShopId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(shopIds)){ + return orgNewCustomerList; } + //公司id-公司店铺list map + Map> orgShopListMap = opCustomerDOMapper.selectOrgByShopIds(shopIds).stream().distinct().collect(Collectors.groupingBy(CustomerViewShopVO::getOrgId)); + //每个公司新增数 + List tmpList = new ArrayList<>(); + orgShopListMap.forEach((orgId,customerViewShopList) -> { + CustomerViewCompanyVO orgViewDO = new CustomerViewCompanyVO(); + orgViewDO.setOrgId(orgId); + orgViewDO.setOrgName(customerViewShopList.get(0).getOrgName()); + AtomicInteger newCustomerCount = new AtomicInteger(0); + customerViewShopList.forEach(customerViewShopVO -> { + Long shopId = customerViewShopVO.getShopId(); + int tmpCount = shopIdCountMap.get(shopId) == null ? 0 : Math.toIntExact(shopIdCountMap.get(shopId)); + newCustomerCount.updateAndGet(v -> v + tmpCount); + }); + orgViewDO.setNewCustomerCount(newCustomerCount.get()); + tmpList.add(orgViewDO); + }); + //排序 + orgNewCustomerList = tmpList.stream().sorted(Comparator.comparing(CustomerViewCompanyVO::getNewCustomerCount).reversed()).limit(TEN).collect(Collectors.toList()); + return orgNewCustomerList; + } + + /** + * 店铺新增排行list + * @param newCustimerList 新增好友list + * @return 店铺新增排行list + */ + List getShopNewCustomerList(List newCustimerList){ + //店铺分组 + Map> shopIdMap = newCustimerList.stream().collect(Collectors.groupingBy(OpCustomer::getShopId)); + List shopViewList = new ArrayList<>(); + shopIdMap.forEach((k,v) -> { + CustomerViewShopVO shopVO = new CustomerViewShopVO(); + shopVO.setShopId(k); + shopVO.setNewCustomerCount(v.size()); + PoiStore shopDO = poiStoreDOMapper.selectById(k); + if(shopDO != null){ + shopVO.setShopName(shopDO.getName()); + } + shopViewList.add(shopVO); + }); + //排序 + List shopNewCustomerList = shopViewList.stream().sorted(Comparator.comparing(CustomerViewShopVO::getNewCustomerCount).reversed()).limit(TEN).collect(Collectors.toList()); + return shopNewCustomerList; + } + + /** + * 零推广list + * @param newCustimerList 新增好友list + * @param shopIds 管辖店铺ids + * @return 零推广list + */ + List getZeroExtendList(List newCustimerList, List shopIds){ + List zeroExtendList = new ArrayList<>(); + //有推广的店铺ids + List notZeroShopIds = newCustimerList.stream().map(OpCustomer::getShopId).distinct().collect(Collectors.toList()); + //公司id-公司店铺list map + Map> orgShopListMap = opCustomerDOMapper.selectOrgByShopIds(shopIds).stream().distinct().collect(Collectors.groupingBy(CustomerViewShopVO::getOrgId)); + + List tmpZeroExtendList = new ArrayList<>(); + orgShopListMap.forEach((orgId, orgShopRelationList) -> { + List tmpShopIds = orgShopRelationList.stream().map(CustomerViewShopVO::getShopId).distinct().collect(Collectors.toList()); + int tmpShopCount = tmpShopIds.size(); + CustomerViewZeroExtendVO zeroExtendVO = new CustomerViewZeroExtendVO(); + zeroExtendVO.setOrgId(orgId); + zeroExtendVO.setOrgName(orgShopRelationList.get(0).getOrgName()); + zeroExtendVO.setAllShopCount(tmpShopCount); + //推广的店铺 + tmpShopIds.retainAll(notZeroShopIds); + zeroExtendVO.setZeroShopCount(tmpShopCount - tmpShopIds.size()); + tmpZeroExtendList.add(zeroExtendVO); + }); + zeroExtendList = tmpZeroExtendList.stream().filter(zeroExtendDO -> zeroExtendDO.getZeroShopCount() > 0).collect(Collectors.toList()); + return zeroExtendList; } } diff --git a/src/main/resources/mapper/OpCustomerDOMapper.xml b/src/main/resources/mapper/OpCustomerDOMapper.xml index 7dc1a59..b9a2bd4 100644 --- a/src/main/resources/mapper/OpCustomerDOMapper.xml +++ b/src/main/resources/mapper/OpCustomerDOMapper.xml @@ -54,7 +54,8 @@ + + + + + + diff --git a/src/main/resources/mapper/OpVipDOMapper.xml b/src/main/resources/mapper/OpVipDOMapper.xml index 45dbf80..64aa016 100644 --- a/src/main/resources/mapper/OpVipDOMapper.xml +++ b/src/main/resources/mapper/OpVipDOMapper.xml @@ -21,4 +21,23 @@ + + +