This commit is contained in:
苏竹红
2023-06-14 20:00:22 +08:00
parent ef6d92df1a
commit f0f54a929e
18 changed files with 109 additions and 329 deletions

View File

@@ -1,11 +1,7 @@
package com.cool.store.controller;
import com.alibaba.fastjson.JSONArray;
import com.aliyun.openservices.shade.com.alibaba.rocketmq.common.filter.impl.Op;
import com.cool.store.enums.RocketMqTagEnum;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.OpenAreaService;
import com.cool.store.utils.UUIDUtils;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import com.cool.store.vo.OpenProvinceVO;
@@ -55,7 +51,7 @@ public class OpenAreaController {
@ApiImplicitParam(name = "keyword", value = "搜索关键字", required = false),
})
public ResponseResult<List<OpenAreaTreeVO>> getOpenAreaList(@RequestParam(value = "keyword",required = false)String keyword){
List<OpenAreaTreeVO> openAreaTreeVOS = openAreaService.queryByKeyword(keyword);
List<OpenAreaTreeVO> openAreaTreeVOS = openAreaService.queryByKeyword(keyword,Boolean.FALSE);
return ResponseResult.success(openAreaTreeVOS);
}

View File

@@ -1,212 +0,0 @@
package com.cool.store.service.Impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dao.HyOpenAreaInfoDAO;
import com.cool.store.dto.partner.ApplyReservationProvinceDTO;
import com.cool.store.entity.HyOpenAreaInfoDO;
import com.cool.store.service.OpenAreaService;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import com.cool.store.vo.OpenProvinceVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author suzhuhong
* @Date 2023/6/6 14:28
* @Version 1.0
*/
@Service
public class OpenAreaServiceImpl implements OpenAreaService {
@Resource
HyOpenAreaInfoDAO hyOpenAreaInfoDAO;
@Override
public PageInfo<OpenAreaVO> queryKeyOpenAreaList(Integer pageSize, Integer pageNumber) {
PageHelper.startPage(pageNumber,pageSize);
PageInfo hyOpenAreaInfoDOPageInfo = hyOpenAreaInfoDAO.queryKeyOpenArea();
if (hyOpenAreaInfoDOPageInfo==null){
return new PageInfo<>();
}
List<OpenAreaVO> list = new ArrayList<>();
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOList = hyOpenAreaInfoDOPageInfo.getList();
hyOpenAreaInfoDOList.stream().forEach(x->{
list.add(convertDoToVo(x));
});
hyOpenAreaInfoDOPageInfo.setList(list);
return hyOpenAreaInfoDOPageInfo;
}
/**
* List DO->VO
* @param hyOpenAreaInfoDO
* @return
*/
private OpenAreaVO convertDoToVo(HyOpenAreaInfoDO hyOpenAreaInfoDO){
OpenAreaVO openAreaVO = new OpenAreaVO();
openAreaVO.setId(hyOpenAreaInfoDO.getId());
openAreaVO.setAreaName(hyOpenAreaInfoDO.getAreaName());
openAreaVO.setParentId(hyOpenAreaInfoDO.getParentId());
openAreaVO.setAreaPath(hyOpenAreaInfoDO.getAreaPath());
openAreaVO.setAreaStatus(hyOpenAreaInfoDO.getAreaStatus());
openAreaVO.setBackgroundBanner(hyOpenAreaInfoDO.getBackgroundBanner());
openAreaVO.setDetailBanner(hyOpenAreaInfoDO.getDetailBanner());
return openAreaVO;
}
@Override
public List<OpenAreaTreeVO> queryByKeyword(String keyword) {
//先查出所有的一级菜单
List<HyOpenAreaInfoDO> openArea = hyOpenAreaInfoDAO.queryFirstLevel();
Map<Long, HyOpenAreaInfoDO> longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
//查询关键字下所有的数据 原始的数据
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,Boolean.FALSE);
Map<Long, HyOpenAreaInfoDO> hyMap = hyOpenAreaInfoDOS.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
Set list = new HashSet();
hyOpenAreaInfoDOS.stream().forEach(x->{
Long parentId = x.getParentId();
HyOpenAreaInfoDO hyOpenAreaInfoDO = hyMap.get(parentId);
if (hyOpenAreaInfoDO==null&&parentId!=null){
//添加到集合中
list.add(x.getParentId());
}
});
if (CollectionUtils.isNotEmpty(list)){
//二级采单
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOList = hyOpenAreaInfoDAO.queryByIdsExcludeFirstLevel(new ArrayList<>(list));
hyOpenAreaInfoDOS.addAll(hyOpenAreaInfoDOList);
//如果二级采单是空 说明list全部是一级采单
if (CollectionUtils.isEmpty(hyOpenAreaInfoDOList)){
list.stream().forEach(x->{
HyOpenAreaInfoDO hyOpenAreaInfoDO = hyMap.get(x);
if (hyOpenAreaInfoDO==null){
hyOpenAreaInfoDOS.add(longHyOpenAreaInfoDOMap.get(x));
}
});
}
hyOpenAreaInfoDOList.stream().forEach(x->{
Long parentId = x.getParentId();
HyOpenAreaInfoDO hyOpenAreaInfoDO = hyMap.get(parentId);
if (hyOpenAreaInfoDO==null){
HyOpenAreaInfoDO infoDO = longHyOpenAreaInfoDOMap.get(parentId);
hyOpenAreaInfoDOS.add(infoDO);
}
});
}
JSONArray objects = buildTree(JSONArray.parseArray(JSONObject.toJSONString(hyOpenAreaInfoDOS)), "id", "parentId","childNode" );
List<OpenAreaTreeVO> openAreaTreeVOS = JSONObject.parseArray(objects.toJSONString(), OpenAreaTreeVO.class);
return openAreaTreeVOS;
}
@Override
public OpenProvinceVO getOpenProvince() {
//先查出所有的一级菜单
List<HyOpenAreaInfoDO> openArea = hyOpenAreaInfoDAO.queryFirstLevel();
List<ApplyReservationProvinceDTO> applyReservationProvinceCount = hyOpenAreaInfoDAO.getApplyReservationProvinceCount();
Map<String, Integer> applyMap = applyReservationProvinceCount.stream().collect(Collectors.toMap(ApplyReservationProvinceDTO::getAreaName, ApplyReservationProvinceDTO::getApplyCount));
Map<String, Integer> reservationMap = applyReservationProvinceCount.stream().collect(Collectors.toMap(ApplyReservationProvinceDTO::getAreaName, ApplyReservationProvinceDTO::getReservationCount));
List<OpenAreaVO> applyProvinceList = new ArrayList<>();
List<OpenAreaVO> reservationProvinceList = new ArrayList<>();
openArea.stream().forEach(x->{
String areaName = x.getAreaName();
if (applyMap.getOrDefault(areaName,0)>0){
applyProvinceList.add(convertDoToVo(x));
}
if (reservationMap.getOrDefault(areaName,0)>0){
reservationProvinceList.add(convertDoToVo(x));
}
});
OpenProvinceVO openProvinceVO = new OpenProvinceVO();
openProvinceVO.setApplyProvinceList(applyProvinceList);
openProvinceVO.setReservationProvinceList(reservationProvinceList);
return openProvinceVO;
}
@Override
public List<OpenAreaVO> getChildrenList(String type, Long parentId) {
List<HyOpenAreaInfoDO> childrenList = hyOpenAreaInfoDAO.getChildrenList(type, parentId);
List<OpenAreaVO> result = new ArrayList<>();
childrenList.stream().forEach(x->{
OpenAreaVO openAreaVO = convertDoToVo(x);
result.add(openAreaVO);
});
return result;
}
/**
* 组装城市树
* @param arr
* @param id
* @param pid
* @param child
* @return
*/
public static JSONArray buildTree(JSONArray arr, String id, String pid, String child) {
//新建一个JSONArray来接收组装成树形结构的返回值
JSONArray jsonArray = new JSONArray();
//新建一个JSONObject对象
JSONObject hash = new JSONObject();
//将数组转换为object格式
for (int i = 0; i < arr.size(); i++) {
//获取当前的JSON对象
JSONObject json = (JSONObject) arr.get(i);
//把当前id作为键当前JSON对象作为值 put回hash这个Object对象中
//这里的put方法类似于map的put方法
hash.put(json.getString(id), json);
}
//遍历结果集
for (int j = 0; j < arr.size(); j++) {
//单条记录
JSONObject aVal = (JSONObject) arr.get(j);
//在hash中取出key为单条记录中pid的值
String pidStr = "";
//如果父级id不等于null
if (aVal.get(pid) != null) {
pidStr = aVal.get(pid).toString();
}
//从hash这个对象中获取父级对象 parent
JSONObject hashParent = (JSONObject) hash.get(pidStr);
//如果记录的pid存在则说明它有父节点将她添加到孩子节点的集合中
if (hashParent != null) {
//检查是否有child属性
if (hashParent.get(child) != null) {
//有子节点 则先将子节点取出
JSONArray children = (JSONArray) hashParent.get(child);
//然后把当前这个对象放进子节点之中
children.add(aVal);
//最后把子节点在放回父节点之中
hashParent.put(child, children);
} else {
//无子节点 则新建一个子节点
JSONArray children = new JSONArray();
//然后再把当前对象放进去
children.add(aVal);
//最后在放回父节点之中
hashParent.put(child, children);
}
} else {
jsonArray.add(aVal);
}
}
return jsonArray;
}
}

View File

@@ -1,50 +0,0 @@
package com.cool.store.service;
import com.alibaba.fastjson.JSONArray;
import com.cool.store.vo.OpenAreaTreeVO;
import com.cool.store.vo.OpenAreaVO;
import com.cool.store.vo.OpenProvinceVO;
import com.github.pagehelper.PageInfo;
import java.util.List;
/**
* @Author suzhuhong
* @Date 2023/6/6 14:27
* @Version 1.0
*/
public interface OpenAreaService {
/**
* 重点城市
* @param pageSize
* @param pageNumber
* @return
*/
PageInfo<OpenAreaVO> queryKeyOpenAreaList(Integer pageSize,Integer pageNumber);
/**
* 查询全部
* @return
*/
List<OpenAreaTreeVO> queryByKeyword(String keyword);
/**
* 查询可申请区域 可预约区域
* @return
*/
OpenProvinceVO getOpenProvince();
/**
* 查询子列表
* @param type
* @param parentId
* @return
*/
List<OpenAreaVO> getChildrenList(String type,Long parentId);
}