前后端修改
This commit is contained in:
@@ -1,20 +1,25 @@
|
||||
package com.klp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.exception.ServiceException;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.klp.domain.bo.WmsActualWarehouseBo;
|
||||
import com.klp.domain.bo.WmsActualWarehouseHierarchyBo;
|
||||
import com.klp.domain.vo.WmsActualWarehouseTreeVo;
|
||||
import com.klp.domain.vo.WmsActualWarehouseImportVo;
|
||||
import com.klp.domain.vo.WmsActualWarehouseVo;
|
||||
import com.klp.domain.WmsActualWarehouse;
|
||||
import com.klp.mapper.WmsActualWarehouseMapper;
|
||||
import com.klp.service.IWmsActualWarehouseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 实际库区/库位自关联Service业务层处理
|
||||
@@ -46,6 +51,36 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WmsActualWarehouseTreeVo> queryTree(WmsActualWarehouseBo bo) {
|
||||
if (bo == null) {
|
||||
bo = new WmsActualWarehouseBo();
|
||||
}
|
||||
LambdaQueryWrapper<WmsActualWarehouse> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(StringUtils.isNotBlank(bo.getActualWarehouseCode()), WmsActualWarehouse::getActualWarehouseCode, bo.getActualWarehouseCode());
|
||||
wrapper.like(StringUtils.isNotBlank(bo.getActualWarehouseName()), WmsActualWarehouse::getActualWarehouseName, bo.getActualWarehouseName());
|
||||
wrapper.eq(bo.getActualWarehouseType() != null, WmsActualWarehouse::getActualWarehouseType, bo.getActualWarehouseType());
|
||||
wrapper.eq(bo.getIsEnabled() != null, WmsActualWarehouse::getIsEnabled, bo.getIsEnabled());
|
||||
wrapper.orderByAsc(WmsActualWarehouse::getSortNo, WmsActualWarehouse::getActualWarehouseId);
|
||||
List<WmsActualWarehouseVo> flatList = baseMapper.selectVoList(wrapper);
|
||||
Map<Long, WmsActualWarehouseTreeVo> nodeMap = new LinkedHashMap<>();
|
||||
flatList.forEach(item -> {
|
||||
WmsActualWarehouseTreeVo node = new WmsActualWarehouseTreeVo();
|
||||
BeanUtil.copyProperties(item, node);
|
||||
nodeMap.put(node.getActualWarehouseId(), node);
|
||||
});
|
||||
List<WmsActualWarehouseTreeVo> roots = new ArrayList<>();
|
||||
nodeMap.values().forEach(node -> {
|
||||
Long parentId = Optional.ofNullable(node.getParentId()).orElse(0L);
|
||||
if (parentId == 0 || !nodeMap.containsKey(parentId)) {
|
||||
roots.add(node);
|
||||
} else {
|
||||
nodeMap.get(parentId).getChildren().add(node);
|
||||
}
|
||||
});
|
||||
return roots;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<WmsActualWarehouse> buildQueryWrapper(WmsActualWarehouseBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<WmsActualWarehouse> lqw = Wrappers.lambdaQuery();
|
||||
@@ -82,6 +117,80 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public List<Long> createHierarchy(WmsActualWarehouseHierarchyBo bo) {
|
||||
if (bo.getLevels() == null || bo.getLevels().isEmpty()) {
|
||||
throw new ServiceException("层级数据不能为空");
|
||||
}
|
||||
List<WmsActualWarehouseHierarchyBo.HierarchyLevel> sortedLevels = bo.getLevels().stream()
|
||||
.sorted(Comparator.comparing(WmsActualWarehouseHierarchyBo.HierarchyLevel::getLevel))
|
||||
.collect(Collectors.toList());
|
||||
Long parentId = 0L;
|
||||
List<Long> createdIds = new ArrayList<>();
|
||||
for (WmsActualWarehouseHierarchyBo.HierarchyLevel level : sortedLevels) {
|
||||
Integer levelValue = level.getLevel();
|
||||
if (levelValue == null || levelValue < 1 || levelValue > 3) {
|
||||
throw new ServiceException("层级必须在1-3之间");
|
||||
}
|
||||
if (level.getActualWarehouseId() != null) {
|
||||
WmsActualWarehouse existing = baseMapper.selectById(level.getActualWarehouseId());
|
||||
if (existing == null) {
|
||||
throw new ServiceException("指定的节点不存在:" + level.getActualWarehouseId());
|
||||
}
|
||||
if (!Objects.equals(Optional.ofNullable(existing.getParentId()).orElse(0L), parentId)) {
|
||||
throw new ServiceException("节点不属于当前父级,无法复用");
|
||||
}
|
||||
parentId = existing.getActualWarehouseId();
|
||||
continue;
|
||||
}
|
||||
if (StringUtils.isBlank(level.getActualWarehouseCode()) || StringUtils.isBlank(level.getActualWarehouseName())) {
|
||||
throw new ServiceException("编码与名称不能为空");
|
||||
}
|
||||
WmsActualWarehouse duplicate = baseMapper.selectOne(Wrappers.<WmsActualWarehouse>lambdaQuery()
|
||||
.eq(WmsActualWarehouse::getParentId, parentId)
|
||||
.and(wrapper -> wrapper.eq(WmsActualWarehouse::getActualWarehouseCode, level.getActualWarehouseCode())
|
||||
.or()
|
||||
.eq(WmsActualWarehouse::getActualWarehouseName, level.getActualWarehouseName())));
|
||||
if (duplicate != null) {
|
||||
parentId = duplicate.getActualWarehouseId();
|
||||
continue;
|
||||
}
|
||||
WmsActualWarehouse entity = new WmsActualWarehouse();
|
||||
entity.setParentId(parentId);
|
||||
entity.setActualWarehouseType(levelValue.longValue());
|
||||
entity.setActualWarehouseCode(level.getActualWarehouseCode());
|
||||
entity.setActualWarehouseName(level.getActualWarehouseName());
|
||||
entity.setSortNo(Optional.ofNullable(level.getSortNo()).orElse(0L));
|
||||
entity.setIsEnabled(Optional.ofNullable(level.getIsEnabled()).orElse(1));
|
||||
entity.setRemark(level.getRemark());
|
||||
baseMapper.insert(entity);
|
||||
parentId = entity.getActualWarehouseId();
|
||||
createdIds.add(parentId);
|
||||
}
|
||||
return createdIds;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void importHierarchy(List<WmsActualWarehouseImportVo> importList) {
|
||||
if (CollUtil.isEmpty(importList)) {
|
||||
throw new ServiceException("导入数据不能为空");
|
||||
}
|
||||
for (WmsActualWarehouseImportVo row : importList) {
|
||||
List<WmsActualWarehouseHierarchyBo.HierarchyLevel> levels = new ArrayList<>();
|
||||
appendLevel(levels, 1, row.getLevelOneCode(), row.getLevelOneName(), row.getLevelOneSort());
|
||||
appendLevel(levels, 2, row.getLevelTwoCode(), row.getLevelTwoName(), row.getLevelTwoSort());
|
||||
appendLevel(levels, 3, row.getLevelThreeCode(), row.getLevelThreeName(), row.getLevelThreeSort());
|
||||
if (levels.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
WmsActualWarehouseHierarchyBo bo = new WmsActualWarehouseHierarchyBo();
|
||||
bo.setLevels(levels);
|
||||
createHierarchy(bo);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
@@ -89,6 +198,23 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
private void appendLevel(List<WmsActualWarehouseHierarchyBo.HierarchyLevel> levels,
|
||||
int level,
|
||||
String code,
|
||||
String name,
|
||||
Long sortNo) {
|
||||
if (StringUtils.isBlank(code) || StringUtils.isBlank(name)) {
|
||||
return;
|
||||
}
|
||||
WmsActualWarehouseHierarchyBo.HierarchyLevel item = new WmsActualWarehouseHierarchyBo.HierarchyLevel();
|
||||
item.setLevel(level);
|
||||
item.setActualWarehouseCode(code.trim());
|
||||
item.setActualWarehouseName(name.trim());
|
||||
item.setSortNo(Optional.ofNullable(sortNo).orElse(0L));
|
||||
item.setIsEnabled(1);
|
||||
levels.add(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除实际库区/库位自关联
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user