diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/controller/BasicAreaController.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/controller/BasicAreaController.java index 7f595fc..99c03ab 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/controller/BasicAreaController.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/controller/BasicAreaController.java @@ -49,6 +49,16 @@ public class BasicAreaController extends BaseController { return getDataTable(list); } + @GetMapping("/areaTree") + public AjaxResult deptTree(BasicArea area) { + try { + return success(basicAreaService.selectAreaTreeList(area)); + } catch (Exception e) { + logger.error(e.toString(), e); + } + return error("系统异常,请联系管理员"); + } + /** * 导出区域列表 */ diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/domain/BasicArea.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/domain/BasicArea.java index 2ec06c5..b859bf9 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/domain/BasicArea.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/domain/BasicArea.java @@ -6,6 +6,9 @@ import lombok.Data; import lombok.ToString; import com.bonus.common.core.web.domain.BaseEntity; +import java.util.ArrayList; +import java.util.List; + /** * 区域对象 basic_area * @@ -47,5 +50,6 @@ public class BasicArea extends BaseEntity { @ApiModelProperty(value = "联系电话") private String contactTel; + private List children = new ArrayList(); } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicAreaMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicAreaMapper.java index bd9302c..1348b5d 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicAreaMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicAreaMapper.java @@ -26,6 +26,8 @@ public interface BasicAreaMapper { */ public List selectBasicAreaList(BasicArea basicArea); + public BasicArea selectBasicAreaByAreaName(String areaName); + /** * 新增区域 * diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicCanteenMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicCanteenMapper.java index 935b702..7e986e7 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicCanteenMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/mapper/BasicCanteenMapper.java @@ -18,6 +18,8 @@ public interface BasicCanteenMapper { */ public BasicCanteen selectBasicCanteenByCanteenId(Long canteenId); + public int getBasicCanteenCountByAreaIds(Long[] areaIds); + /** * 查询食堂信息列表 * diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/IBasicAreaService.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/IBasicAreaService.java index f4ec736..0dcebd3 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/IBasicAreaService.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/IBasicAreaService.java @@ -2,6 +2,7 @@ package com.bonus.canteen.core.basic.service; import java.util.List; import com.bonus.canteen.core.basic.domain.BasicArea; +import com.bonus.canteen.core.common.domain.TreeSelect; /** * 区域Service接口 @@ -26,6 +27,8 @@ public interface IBasicAreaService { */ public List selectBasicAreaList(BasicArea basicArea); + public List selectAreaTreeList(BasicArea area); + /** * 新增区域 * diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/impl/BasicAreaServiceImpl.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/impl/BasicAreaServiceImpl.java index 8115c4c..b4581e6 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/impl/BasicAreaServiceImpl.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/basic/service/impl/BasicAreaServiceImpl.java @@ -1,8 +1,18 @@ package com.bonus.canteen.core.basic.service.impl; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import com.bonus.canteen.core.basic.mapper.BasicCanteenMapper; +import com.bonus.canteen.core.common.domain.TreeSelect; +import com.bonus.canteen.core.supermarket.mapper.SupermarketInfoMapper; +import com.bonus.canteen.core.supply.mapper.SupplyWarehouseInfoMapper; import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.utils.DateUtils; +import com.bonus.common.core.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.bonus.canteen.core.basic.mapper.BasicAreaMapper; @@ -19,6 +29,12 @@ import com.bonus.canteen.core.basic.service.IBasicAreaService; public class BasicAreaServiceImpl implements IBasicAreaService { @Autowired private BasicAreaMapper basicAreaMapper; + @Autowired + private BasicCanteenMapper basicCanteenMapper; + @Autowired + private SupermarketInfoMapper supermarketInfoMapper; + @Autowired + SupplyWarehouseInfoMapper supplyWarehouseInfoMapper; /** * 查询区域 @@ -42,6 +58,12 @@ public class BasicAreaServiceImpl implements IBasicAreaService { return basicAreaMapper.selectBasicAreaList(basicArea); } + @Override + public List selectAreaTreeList(BasicArea area) { + List areas = selectBasicAreaList(area); + return buildAreaTreeSelect(areas); + } + /** * 新增区域 * @@ -52,6 +74,10 @@ public class BasicAreaServiceImpl implements IBasicAreaService { public int insertBasicArea(BasicArea basicArea) { basicArea.setCreateTime(DateUtils.getNowDate()); try { + BasicArea checkResult = basicAreaMapper.selectBasicAreaByAreaName(basicArea.getAreaName()); + if (Objects.nonNull(checkResult)) { + throw new ServiceException("区域名称已存在"); + } return basicAreaMapper.insertBasicArea(basicArea); } catch (Exception e) { throw new ServiceException(e.getMessage()); @@ -68,6 +94,12 @@ public class BasicAreaServiceImpl implements IBasicAreaService { public int updateBasicArea(BasicArea basicArea) { basicArea.setUpdateTime(DateUtils.getNowDate()); try { + List allAreaList = basicAreaMapper.selectBasicAreaList(new BasicArea()); + List otherAreaNameList = allAreaList.stream().filter(item -> !item.getAreaId().equals(basicArea.getAreaId())) + .map(BasicArea::getAreaName).collect(Collectors.toList()); + if (otherAreaNameList.contains(basicArea.getAreaName())) { + throw new ServiceException("区域名称已存在"); + } return basicAreaMapper.updateBasicArea(basicArea); } catch (Exception e) { throw new ServiceException(e.getMessage()); @@ -82,6 +114,18 @@ public class BasicAreaServiceImpl implements IBasicAreaService { */ @Override public int deleteBasicAreaByAreaIds(Long[] areaIds) { + int count1 = basicCanteenMapper.getBasicCanteenCountByAreaIds(areaIds); + if (count1 > 0) { + throw new ServiceException("该区域含有食堂信息,不能删除"); + } + int coun2 = supermarketInfoMapper.getSupermarketCountByAreaIds(areaIds); + if (coun2 > 0) { + throw new ServiceException("该区域含有超市信息,不能删除"); + } + int coun3 = supplyWarehouseInfoMapper.getSupplyWarehouseCountByAreaIds(areaIds); + if (coun3 > 0) { + throw new ServiceException("该区域含有仓库信息,不能删除"); + } return basicAreaMapper.deleteBasicAreaByAreaIds(areaIds); } @@ -95,4 +139,66 @@ public class BasicAreaServiceImpl implements IBasicAreaService { public int deleteBasicAreaByAreaId(Long areaId) { return basicAreaMapper.deleteBasicAreaByAreaId(areaId); } + + public List buildAreaTreeSelect(List areas) + { + List areaTrees = buildAreaTree(areas); + return areaTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public List buildAreaTree(List areas) { + List returnList = new ArrayList(); + List tempList = areas.stream().map(BasicArea::getAreaId).collect(Collectors.toList()); + for (BasicArea area : areas) + { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(area.getParentId())) + { + recursionFn(areas, area); + returnList.add(area); + } + } + if (returnList.isEmpty()) + { + returnList = areas; + } + return returnList; + } + + private void recursionFn(List list, BasicArea t) + { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (BasicArea tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + private List getChildList(List list, BasicArea t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + BasicArea n = (BasicArea) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getAreaId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild(List list, BasicArea t) + { + return getChildList(list, t).size() > 0 ? true : false; + } } diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java index 6eae23a..33ec13c 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/common/domain/TreeSelect.java @@ -1,5 +1,6 @@ package com.bonus.canteen.core.common.domain; +import com.bonus.canteen.core.basic.domain.BasicArea; import com.fasterxml.jackson.annotation.JsonInclude; import java.io.Serializable; import java.util.List; @@ -41,13 +42,12 @@ public class TreeSelect implements Serializable { } -// public TreeSelect(AllocArea area) { -// this.parentId = area.getParentId(); -// this.id = area.getAreaId(); -// this.label = area.getAreaName(); -// this.status = area.getDelFlag(); -// this.children = area.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); -// } + public TreeSelect(BasicArea area) { + this.parentId = area.getParentId(); + this.id = area.getAreaId(); + this.label = area.getAreaName(); + this.children = area.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } public Integer getLevel() { return level; diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supermarket/mapper/SupermarketInfoMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supermarket/mapper/SupermarketInfoMapper.java index 961c755..a284376 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supermarket/mapper/SupermarketInfoMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supermarket/mapper/SupermarketInfoMapper.java @@ -18,6 +18,8 @@ public interface SupermarketInfoMapper { */ public SupermarketInfo selectSupermarketInfoBySupermarketId(Long supermarketId); + public int getSupermarketCountByAreaIds(Long[] areaIds); + /** * 查询超市列表 * diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supply/mapper/SupplyWarehouseInfoMapper.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supply/mapper/SupplyWarehouseInfoMapper.java index 4018377..0584fa6 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supply/mapper/SupplyWarehouseInfoMapper.java +++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/supply/mapper/SupplyWarehouseInfoMapper.java @@ -18,6 +18,8 @@ public interface SupplyWarehouseInfoMapper { */ public SupplyWarehouseInfo selectSupplyWarehouseInfoByWarehouseId(Long warehouseId); + public int getSupplyWarehouseCountByAreaIds(Long[] areaIds); + /** * 查询仓库信息列表 * diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/basic/BasicAreaMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/basic/BasicAreaMapper.xml index 12b1aaf..1aac704 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/basic/BasicAreaMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/basic/BasicAreaMapper.xml @@ -17,7 +17,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select area_id, area_name, parent_id, manager, description, contact_tel, create_by, create_time, update_by, update_time from basic_area + select area_id, area_name, parent_id, manager, description, contact_tel, + create_by, create_time, update_by, update_time + from basic_area + + + + insert into basic_canteen diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supermarket/SupermarketInfoMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supermarket/SupermarketInfoMapper.xml index 7ff7405..6b46a65 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supermarket/SupermarketInfoMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supermarket/SupermarketInfoMapper.xml @@ -63,6 +63,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where supermarket_id = #{supermarketId} + + insert into supermarket_info diff --git a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supply/SupplyWarehouseInfoMapper.xml b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supply/SupplyWarehouseInfoMapper.xml index c1af87f..034abfa 100644 --- a/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supply/SupplyWarehouseInfoMapper.xml +++ b/bonus-modules/bonus-smart-canteen/src/main/resources/mapper/supply/SupplyWarehouseInfoMapper.xml @@ -55,6 +55,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where warehouse_id = #{warehouseId} + + insert into supply_warehouse_info