123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689 |
- package com.ruoyi.demo.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.ruoyi.demo.constant.RedisContant;
- import com.ruoyi.demo.entity.*;
- import com.ruoyi.demo.entity.bo.Histogram;
- import com.ruoyi.demo.entity.bo.StoreWdCategoryCount;
- import com.ruoyi.demo.entity.bo.StoreWdCategoryCountBody;
- import com.ruoyi.demo.entity.vo.ChannelAnalyseAceeptVo;
- import com.ruoyi.demo.entity.vo.ChannelMapAceeptVo;
- import com.ruoyi.demo.entity.vo.TagAnalyse;
- import com.ruoyi.demo.mapper.*;
- import com.ruoyi.demo.service.ChannelAnalyseService;
- import com.ruoyi.demo.utils.InitMapUtil;
- import com.ruoyi.demo.utils.WdRedisStoreage;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.data.geo.Circle;
- import org.springframework.data.geo.Distance;
- import org.springframework.data.geo.GeoResults;
- import org.springframework.data.geo.Point;
- import org.springframework.data.redis.connection.RedisGeoCommands;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.client.RestTemplate;
- import java.math.BigDecimal;
- import java.util.*;
- import java.util.concurrent.CompletableFuture;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.ExecutorService;
- import java.util.stream.Collectors;
- @Slf4j
- @Service
- @Transactional
- public class ChannelAnalyseServiceImpl implements ChannelAnalyseService {
- @Autowired
- private AddrCategoryDao addrCategoryDao;
- @Autowired
- WdInfoDao wdInfoDao;
- @Autowired
- InitMapUtil initMapUtil;
- @Autowired
- BrandMapper brandMapper;
- @Autowired
- WdTopologicalInfoDao wdTopologicalInfoDao;
- @Autowired
- private WdRedisStoreage wdRedisStoreage;
- @Autowired
- private StoreWdDao storeWdDao;
- @Autowired
- @Qualifier("executor")
- ExecutorService executor;
- /**
- * 网点城市等级分布统计
- * @param channelMapAceeptVo 渠道地图过滤请求接收体
- * @return
- */
- @Override
- public HashMap cityTier(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.初始化统计结果
- HashMap<String, Long> result = new HashMap<>();
- result.put("一线", 0L);
- result.put("新一线", 0L);
- result.put("二线", 0L);
- result.put("三线", 0L);
- result.put("四线", 0L);
- result.put("五线", 0L);
- result.put("其他", 0L);
- //2.获取所有符合条件的网点信息
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("addr_code","count(*) as audit");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo); //封装过滤条件
- queryWrapper.groupBy("addr_code");
- List<WdInfo> wdInfos = wdInfoDao.selectList(queryWrapper);
- //3.统计各个城市等级的网点数量
- for (WdInfo wdInfo : wdInfos) {
- //通过 网点区码 得到 该网点属于几线城市 例如:4509010000 -> 二线
- String initCityTierMap = initMapUtil.getInitCityTierMap(wdInfo.getAddrCode());
- if (initCityTierMap != null) {
- result.put(initCityTierMap, result.get(initCityTierMap) + wdInfo.getAudit());
- } else
- result.put("其他", result.get("其他") + wdInfo.getAudit());
- }
- return result;
- }
- /**
- * 品牌列表
- * @param channelAnalyseAceeptVo 渠道地图过滤请求接收体
- * @return
- */
- @Override
- public Page<Brand> brandList(ChannelAnalyseAceeptVo channelAnalyseAceeptVo) {
- QueryWrapper<Brand> queryWrapper = new QueryWrapper<>();
- if (channelAnalyseAceeptVo.getSearchText() != null && !channelAnalyseAceeptVo.getSearchText().equals(""))
- queryWrapper.like("brand_name",channelAnalyseAceeptVo.getSearchText());
- Page<Brand> page = new Page<>();
- page.setSize(channelAnalyseAceeptVo.getPageSize());
- page.setCurrent(channelAnalyseAceeptVo.getPageNum());
- Page<Brand> brandPage = brandMapper.selectPage(page, queryWrapper);
- return brandPage;
- }
- //TODO 待优化
- @Override
- public HashMap<String, Object> tagAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.根据条件的到位网点信息
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("wd_id");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo);
- List<WdInfo> queryWd = wdInfoDao.selectList(queryWrapper);
- //2.得到网点Id
- List<String> collect = queryWd.stream().map(item -> {
- return RedisContant.WD_TAG + "_" + item.getWdId();
- }).collect(Collectors.toList());
- queryWd = null;
- //3.切割网点分批次获取网点标签
- ConcurrentHashMap<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();
- concurrentHashMap.put("total",0);
- int split = 4000; //每次获取的网点次数
- int splitCount = collect.size()%split == 0 ? (collect.size()/split) : (collect.size()/split + 1); //共计次数
- int p1 = 0,p2 = split;
- ArrayList<CompletableFuture<Void>> splitList = new ArrayList<>();
- for (int i=1;i<=splitCount;i++){
- if (p2 > collect.size())
- p2 = collect.size();
- List<String> list2 = collect.subList(p1, p2);
- //创建线程任务
- CompletableFuture<Void> future = CompletableFuture.runAsync(()->{
- tagAnalyseItem(concurrentHashMap,list2); //统计
- },executor);
- splitList.add(future);
- p1 = p2;
- p2+=split;
- }
- //3.统计
- CompletableFuture.allOf(splitList.toArray(new CompletableFuture[splitList.size()])).join();
- splitList = null;
- //4.封装统计值
- HashMap<String, Object> result = new HashMap<>();
- List<TagAnalyse> list = new ArrayList<>();
- Integer total = concurrentHashMap.get("total");
- for (String s : concurrentHashMap.keySet()) {
- if (s.equals("total"))
- continue;
- TagAnalyse tagAnalyse = new TagAnalyse();
- tagAnalyse.setName(s);
- tagAnalyse.setCount(concurrentHashMap.get(s));
- BigDecimal bigDecimal = new BigDecimal((double) tagAnalyse.getCount() / total);
- double v = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
- tagAnalyse.setRadio(v);
- list.add(tagAnalyse);
- }
- //5.对结果集进行排序
- Collections.sort(list, new Comparator<TagAnalyse>() {
- @Override
- public int compare(TagAnalyse o1, TagAnalyse o2) {
- return o2.getCount() - o1.getCount();
- }
- });
- //5.分页返回结果集
- int i = 1;
- int start = 0,end = channelMapAceeptVo.getPageSize();
- while(start<list.size()){
- if(end>=list.size())
- end = list.size();
- result.put(""+i++,new ArrayList(list.subList(start,end)));
- start=end;
- end += channelMapAceeptVo.getPageSize();
- }
- result.put("pages",i-1);
- result.put("total",list.size());
- return result;
- }
- //TODO 待优化
- public void tagAnalyseItem(ConcurrentHashMap<String,Integer> concurrentHashMap, List<String> keys){
- //2.获取网点周边标签,并进行统计
- int total = 0;
- List<List<String>> wdTagList = wdRedisStoreage.getWdTagList(keys);
- for (List<String> list : wdTagList) {
- if (list == null || list.size() == 0)
- continue;
- for (String s : list) {
- s += "边";
- Integer integer = concurrentHashMap.get(s);
- if (integer == null)
- concurrentHashMap.put(s,1);
- else
- concurrentHashMap.put(s,integer+1);
- }
- total++;
- }
- wdTagList = null;
- concurrentHashMap.put("total",concurrentHashMap.get("total")+total);
- }
- /**
- * 网点分类统计
- * @param channelMapAceeptVo 渠道地图过滤请求接收体
- * @return
- */
- @Override
- public List<StoreWdCategoryCount> category(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.查询所有符合的门店网点
- channelMapAceeptVo.setChannel(new String[]{"1"});
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("wd_id");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo); //封装过滤条件
- List<StoreWd> storeWds = storeWdDao.category(queryWrapper);
- //2.统计各个分类的网点数量 HashMap<分类code,门店网点分类数量对象>
- HashMap<String,StoreWdCategoryCount> hashMap = new HashMap<>();
- for (StoreWd storeWd : storeWds) {
- //分类为null、空跳过
- if(storeWd.getManageTypeCode() == null || storeWd.getManageTypeCode().equals(""))
- continue;
- //2.1 通过 分类Code 得到 具体的分类实体
- ManageType manageType = initMapUtil.getInitManageType(storeWd.getManageTypeCode());
- //2.2 通过 分类Code 得到 门店网点分类数量对象
- String s = storeWd.getManageTypeCode().substring(0, 4) + "00";
- StoreWdCategoryCount storeWdCategoryCount = hashMap.get(s);
- if (storeWdCategoryCount == null){
- //创建 门店网点分类数量体
- StoreWdCategoryCountBody storeWdCategoryCountBody = createStoreWdCategoryCountBody(manageType);
- storeWdCategoryCountBody.setManageTypeCode(storeWd.getManageTypeCode()); //分类code
- storeWdCategoryCountBody.setCount(storeWd.getCommentCount()); //数量
- //初始化 门店网点分类数量对象
- StoreWdCategoryCount storeWdCategoryCount1 = new StoreWdCategoryCount();
- storeWdCategoryCount1.setManageTypeCode(s);
- storeWdCategoryCount1.setName(initMapUtil.getInitManageType(s).getMidCategory());
- storeWdCategoryCount1.setCount(storeWd.getCommentCount());
- //将 门店网点分类数量体 封装进 门店网点数量对象
- ArrayList<StoreWdCategoryCountBody> list = new ArrayList<>();
- list.add(storeWdCategoryCountBody);
- storeWdCategoryCount1.setStoreWdCategoryCountBodyList(list);
- hashMap.put(s,storeWdCategoryCount1);
- }else {
- //创建 门店网点分类数量体
- StoreWdCategoryCountBody storeWdCategoryCountBody = createStoreWdCategoryCountBody(manageType);
- storeWdCategoryCountBody.setManageTypeCode(storeWd.getManageTypeCode());
- storeWdCategoryCountBody.setCount(storeWd.getCommentCount());
- //将 门店网点分类数量体 封装进 门店网点数量对象
- storeWdCategoryCount.getStoreWdCategoryCountBodyList().add(storeWdCategoryCountBody);
- storeWdCategoryCount.setCount(storeWdCategoryCountBody.getCount()+storeWdCategoryCount.getCount());
- //hashMap.put(s,storeWdCategoryCount);
- }
- }
- //3.组装结果集
- List<StoreWdCategoryCount> storeWdCategoryCounts = new ArrayList<>();
- for (String s : hashMap.keySet()) {
- storeWdCategoryCounts.add(hashMap.get(s));
- }
- return storeWdCategoryCounts;
- }
- /**
- * 创建门店网点分类体
- * @param manageType 具体的分类实体
- * @return
- */
- public StoreWdCategoryCountBody createStoreWdCategoryCountBody(ManageType manageType){
- StoreWdCategoryCountBody storeWdCategoryCountBody = new StoreWdCategoryCountBody();
- if(manageType.getSubCategory() != null && !manageType.getSubCategory().equals("")){
- storeWdCategoryCountBody.setName(manageType.getSubCategory());
- }else if(manageType.getMidCategory() != null && !manageType.getMidCategory().equals("")){
- storeWdCategoryCountBody.setName(manageType.getMidCategory());
- }else if (manageType.getBigCategory() != null && !manageType.getBigCategory().equals("")){
- storeWdCategoryCountBody.setName(manageType.getBigCategory());
- }
- return storeWdCategoryCountBody;
- }
- /**
- * 网点营业状态统计
- * @param channelMapAceeptVo 渠道地图过滤请求接收体
- * @return
- */
- @Override
- public HashMap businessStatusAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.查询所有符合的门店网点
- channelMapAceeptVo.setChannel(new String[]{"1"});
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("wd_id");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo); //封装过滤条件
- List<StoreWd> storeWds = storeWdDao.businessStatusAnalyse(queryWrapper);
- //2.统计 HashMap<营业状态,直方图统计体>
- ArrayList<Histogram> list = new ArrayList<>();
- int total = 0;
- for (StoreWd storeWd : storeWds) {
- total+=storeWd.getCommentCount();
- Histogram histogram = new Histogram();
- histogram.setName(storeWd.getBusinessStatus());
- histogram.setCount(storeWd.getCommentCount());
- list.add(histogram);
- }
- //3.返回结果集
- HashMap<String, Object> result = new HashMap<>();
- result.put("total",total);
- result.put("data",list);
- return result;
- }
- /**
- * 楼宇类别统计
- * @param channelMapAceeptVo
- * @return
- */
- @Override
- public ArrayList<Histogram> aroundBuildAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.查询所有符合的网点
- channelMapAceeptVo.setChannel(new String[]{"3"});
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("type_code_by","count(*) as audit");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo); //封装过滤条件
- queryWrapper.and(queryWrapper1 -> {
- queryWrapper1.isNotNull("type_code_by");
- });
- queryWrapper.groupBy("type_code_by");
- List<WdInfo> wdInfos = wdInfoDao.selectList(queryWrapper);
- //2.统计楼宇类别数量
- int total = 0;
- HashMap<String,Integer> hashMap = new HashMap<>();
- for (WdInfo wdInfo : wdInfos) {
- String typeCodeBy = wdInfo.getTypeCodeBy().substring(0,2);
- Integer integer = hashMap.get(typeCodeBy);
- if (integer == null){
- hashMap.put(typeCodeBy,wdInfo.getAudit());
- }else {
- hashMap.put(typeCodeBy,hashMap.get(typeCodeBy)+wdInfo.getAudit());
- }
- total+=wdInfo.getAudit();
- }
- //3.分装统计结果
- ArrayList<Histogram> list = new ArrayList<>();
- for (String s : hashMap.keySet()) {
- Integer integer = hashMap.get(s);
- String initTypeByMap = initMapUtil.getInitTypeByMap(s + "0000").replace(":",""); //根据需求取大类
- Histogram histogram = new Histogram();
- histogram.setName(initTypeByMap);
- histogram.setCount(integer);
- list.add(histogram);
- }
- return list;
- }
- /**
- * 获取人均消费直方图
- * @param channelMapAceeptVo
- * @return
- */
- @Override
- public ArrayList<Histogram> perCapitaConsumpAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.查询所有符合的网点
- channelMapAceeptVo.setChannel(new String[]{"1"});
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("wd_id");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo);
- List<StoreWd> storeWds = storeWdDao.perCapitaConsumpAnalyse(queryWrapper);
- //初始化
- //初始化
- String[] arr = new String[]{"0~20","20~50","50~100","100~200","200以上"};
- ArrayList<Histogram> list = new ArrayList<>();
- for (String s:arr){
- list.add(new Histogram(s,0));
- }
- //2.统计各个人均消费的数量
- for (StoreWd storeWd : storeWds) {
- if (storeWd.getPerCapitaConsumption() != null){
- if (storeWd.getPerCapitaConsumption() >= 0 && storeWd.getPerCapitaConsumption()<20){
- Histogram histogram = list.get(0);
- histogram.setCount(histogram.getCount()+1);
- }else if(storeWd.getPerCapitaConsumption() >= 20 && storeWd.getPerCapitaConsumption()<50){
- Histogram histogram = list.get(1);
- histogram.setCount(histogram.getCount()+1);
- }else if(storeWd.getPerCapitaConsumption() >= 50 && storeWd.getPerCapitaConsumption()< 100){
- Histogram histogram = list.get(2);
- histogram.setCount(histogram.getCount()+1);
- }else if(storeWd.getPerCapitaConsumption() >= 100 && storeWd.getPerCapitaConsumption()< 200){
- Histogram histogram = list.get(3);
- histogram.setCount(histogram.getCount()+1);
- }else {
- Histogram histogram = list.get(4);
- histogram.setCount(histogram.getCount()+1);
- }
- }
- }
- //3.分装统计结果
- return list;
- }
- /**
- * 获取聚道分析-店龄 / 经营时长统计
- * @param channelMapAceeptVo
- * @return
- */
- @Override
- public ArrayList<Histogram> operateTimeAnalyse(ChannelMapAceeptVo channelMapAceeptVo) {
- //1.查询所有符合的网点
- channelMapAceeptVo.setChannel(new String[]{"1"});
- QueryWrapper<WdInfo> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("wd_id");
- assembleQueryWrapper(queryWrapper,channelMapAceeptVo);
- List<StoreWd> storeWds = storeWdDao.operateTimeAnalyse(queryWrapper);
- //2.统计经营时长
- //初始化
- String[] arr = new String[]{"0~5","6~10","11~15","16~24"};
- ArrayList<Histogram> list = new ArrayList<>();
- for (String s:arr){
- list.add(new Histogram(s,0));
- }
- for (StoreWd storeWd : storeWds) {
- Integer opentime = Integer.valueOf(storeWd.getOpentime().substring(0,2));
- Integer closetime = Integer.valueOf(storeWd.getClosetime().substring(0,2));
- int i = closetime - opentime;
- if (i >=0 && i <=5){
- Histogram histogram = list.get(0);
- histogram.setCount(histogram.getCount()+1);
- }else if (i >= 6 && i <= 10){
- Histogram histogram = list.get(1);
- histogram.setCount(histogram.getCount()+1);
- }else if(i >= 11 && i <= 15){
- Histogram histogram = list.get(2);
- histogram.setCount(histogram.getCount()+1);
- }else if(i >= 16){
- Histogram histogram = list.get(3);
- histogram.setCount(histogram.getCount()+1);
- }
- }
- //3.返回结果
- return list;
- }
- /**
- * 封装网点过滤条件(v1.0)
- * @param queryWrapper
- * @param channelMapAceeptVo
- */
- // public void assembleQueryWrapper(QueryWrapper<WdInfo> queryWrapper,ChannelMapAceeptVo channelMapAceeptVo){
- // //1.根据不同级别得到需要查询的 地区码
- // List<String> addrCodeList = new ArrayList<>();
- // if ("province".equals(channelMapAceeptVo.getRankType())) {
- // //省码
- // for (String s : channelMapAceeptVo.getAddrCode()) {
- // String substring = s.substring(0, 2);
- // addrCodeList.add(substring);
- // }
- // } else if ("city".equals(channelMapAceeptVo.getRankType())) {
- // //省的所有市
- // for (String s : channelMapAceeptVo.getAddrCode()) {
- // String substring = s.substring(0, 2);
- // addrCodeList.add(substring);
- // }
- // } else if ("zone".equals(channelMapAceeptVo.getRankType())) {
- // //市的所有区
- // for (String s : channelMapAceeptVo.getAddrCode()) {
- // String substring = s.substring(0, 4);
- // addrCodeList.add(substring);
- // }
- // } else if ("district".equals(channelMapAceeptVo.getRankType())){
- // //区的所有街道
- // for (String s : channelMapAceeptVo.getAddrCode()) {
- // String substring = s.substring(0, 6);
- // addrCodeList.add(substring);
- // }
- // }else {
- // //省码
- // for (String s : channelMapAceeptVo.getAddrCode()) {
- // String substring = s.substring(0, 2);
- // addrCodeList.add(substring);
- // }
- // }
- //
- // queryWrapper.in("wd_type_code", channelMapAceeptVo.getChannel()).and(originWdInfoQueryWrapper -> {
- // for (String s : addrCodeList) {
- // originWdInfoQueryWrapper.likeRight("addr_code", s).or();
- // }
- // });
- //
- // //搜索字段
- // if (channelMapAceeptVo.getSearchText() != null && !channelMapAceeptVo.getSearchText() .trim().equals("")) {
- // queryWrapper.and(originWdInfoQueryWrapper -> {
- // originWdInfoQueryWrapper.like("wd_name", channelMapAceeptVo.getSearchText() );
- // });
- // }
- //
- // //城市等级分类
- // if(channelMapAceeptVo.getCityTier() != null && channelMapAceeptVo.getCityTier().length > 0){
- // List<String> tierCode = new ArrayList<>();
- // for (String s : channelMapAceeptVo.getCityTier()) {
- // List<String> list = initMapUtil.getInitCityTierListMap(s);
- // if (list != null){
- // tierCode.addAll(list);
- // }
- // }
- // queryWrapper.and(wdInfoQueryWrapper -> {
- // for (String s : tierCode) {
- // wdInfoQueryWrapper.likeRight("addr_code", s).or();
- // }
- // });
- // }
- //
- // //排序字段查询
- // if (channelMapAceeptVo.getOrderby() != null && !channelMapAceeptVo.getOrderby().trim().equals("")) {
- // PageHelper.orderBy(channelMapAceeptVo.getOrderby());
- // }
- //
- // }
- /**
- * 封装网点过滤条件(v2.0)
- * @param queryWrapper
- * @param channelMapAceeptVo
- */
- public void assembleQueryWrapper(QueryWrapper<WdInfo> queryWrapper,ChannelMapAceeptVo channelMapAceeptVo){
- //1.根据不同级别得到需要查询的 地区码
- List<String> wdAddrCode = findWdAddrCode(channelMapAceeptVo.getRankType(), channelMapAceeptVo.getAddrCode());
- //是否有联系方式
- if(channelMapAceeptVo.getIsTelephone() != null && !channelMapAceeptVo.getIsTelephone().equals("")){
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.eq("is_telephone",channelMapAceeptVo.getIsTelephone().equals("true") ? 1:0);
- });
- }
- //是否关联品牌
- if(channelMapAceeptVo.getIsBrand() != null && !channelMapAceeptVo.getIsBrand().equals("")){
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.eq("is_brand",channelMapAceeptVo.getIsTelephone().equals("true") ? 1:0);
- });
- }
- //店龄
- if(channelMapAceeptVo.getStoreAge() != null && !channelMapAceeptVo.getStoreAge().equals("")){
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.eq("store_age",channelMapAceeptVo.getStoreAge());
- });
- }
- //组织结构
- if(channelMapAceeptVo.getOrganization() != null && !channelMapAceeptVo.getOrganization().equals("")){
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.eq("organization",channelMapAceeptVo.getOrganization());
- });
- }
- //地区过滤
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.in("addr_code", wdAddrCode);
- });
- //渠道过滤
- if(channelMapAceeptVo.getChannel() != null && channelMapAceeptVo.getChannel().length != 6){
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.in("wd_type_code", channelMapAceeptVo.getChannel());
- });
- }
- //城市等级分类
- if(channelMapAceeptVo.getCityTier() != null && channelMapAceeptVo.getCityTier().length > 0){
- List<String> tierCode = new ArrayList<>();
- for (String s : channelMapAceeptVo.getCityTier()) {
- List<String> list = initMapUtil.getInitCityTierListMap(s);
- if (list != null){
- tierCode.addAll(list);
- }
- }
- if(!tierCode.isEmpty()){
- queryWrapper.and(wdInfoQueryWrapper -> {
- wdInfoQueryWrapper.in("addr_code",tierCode);
- });
- }
- }
- //搜索字段
- if (channelMapAceeptVo.getSearchText() != null && !channelMapAceeptVo.getSearchText() .trim().equals("")) {
- queryWrapper.and(originWdInfoQueryWrapper -> {
- originWdInfoQueryWrapper.like("wd_name", channelMapAceeptVo.getSearchText() );
- });
- }
- //排序字段查询
- if (channelMapAceeptVo.getOrderby() != null && !channelMapAceeptVo.getOrderby().trim().equals("")) {
- PageHelper.orderBy(channelMapAceeptVo.getOrderby());
- }
- }
- /**
- * 找到所有满足条件的网点addrCode
- * @param rankType
- * @param addrCode
- * @return
- */
- private List<String> findWdAddrCode(String rankType,String[] addrCode){
- //1.根据不同级别得到 找到所有 完整的 区码
- List<String> addrCodeList = new ArrayList<>();
- if ("province".equals(rankType)) {
- //addrCode:省码
- for (String string:addrCode)
- addrCodeList.add(string.substring(0, 2));
- } else if ("city".equals(rankType)) {
- //addrCode:省码(只允许有一个)
- String substring = addrCode[0].substring(0, 2); //根据该省码找到旗下的所有的区
- addrCodeList.add(substring);
- } else if ("zone".equals(rankType)) {
- //addrCode:市码(只允许有一个)
- String substring = addrCode[0].substring(0, 4); //根据该市码找到旗下的所有的区
- addrCodeList.add(substring);
- } else {
- for (String string:addrCode)
- addrCodeList.add(string.substring(0, 2));
- }
- //2.找到所有完整的区码
- QueryWrapper<AddrCategory> queryWrapper1 = new QueryWrapper<>();
- queryWrapper1.select("addr_code");
- queryWrapper1.eq("type", "zone");
- queryWrapper1.and(addrCategoryQueryWrapper -> {
- for (String s : addrCodeList) {
- addrCategoryQueryWrapper.likeRight("addr_code", s).or();
- }
- });
- List<AddrCategory> addrCategories1 = addrCategoryDao.selectList(queryWrapper1);
- List<String> collect = addrCategories1.stream().map(item -> {
- return item.getAddrCode();
- }).collect(Collectors.toList());
- return collect;
- }
- }
|