From 28d0852a81a7f0f2e163f8a2e37268d6ca3fd6a2 Mon Sep 17 00:00:00 2001 From: wangyu <823267011@qq.com> Date: Tue, 25 Nov 2025 01:13:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E5=90=8E=E7=AB=AF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- klp-ui/src/api/wms/actualWarehouse.js | 28 + klp-ui/src/assets/styles/element-ui.scss | 46 + .../ActualWarehouseSelect/index.vue | 237 ++-- klp-ui/src/views/wms/coil/actflow.vue | 4 +- klp-ui/src/views/wms/coil/box2.vue | 6 +- klp-ui/src/views/wms/coil/index.vue | 213 +++- klp-ui/src/views/wms/coil/panels/base.vue | 6 +- klp-ui/src/views/wms/coil/product.vue | 2 +- klp-ui/src/views/wms/coil/split.vue | 8 +- klp-ui/src/views/wms/coil/typing.vue | 8 +- klp-ui/src/views/wms/warehouse/real.vue | 1110 ++++++++++++----- .../WmsActualWarehouseController.java | 70 ++ .../bo/WmsActualWarehouseHierarchyBo.java | 64 + .../domain/vo/WmsActualWarehouseImportVo.java | 41 + .../domain/vo/WmsActualWarehouseTreeVo.java | 18 + .../service/IWmsActualWarehouseService.java | 19 +- .../impl/WmsActualWarehouseServiceImpl.java | 132 +- .../impl/WmsCoilPendingActionServiceImpl.java | 2 +- 18 files changed, 1574 insertions(+), 440 deletions(-) create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/WmsActualWarehouseHierarchyBo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseImportVo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseTreeVo.java diff --git a/klp-ui/src/api/wms/actualWarehouse.js b/klp-ui/src/api/wms/actualWarehouse.js index b9edb67c..a66c384a 100644 --- a/klp-ui/src/api/wms/actualWarehouse.js +++ b/klp-ui/src/api/wms/actualWarehouse.js @@ -9,6 +9,15 @@ export function listActualWarehouse(query) { }) } +// 获取完整三级目录 +export function listActualWarehouseTree(query) { + return request({ + url: '/wms/actualWarehouse/tree', + method: 'get', + params: query + }) +} + // 查询实际库区/库位自关联详细 export function getActualWarehouse(actualWarehouseId) { return request({ @@ -26,6 +35,25 @@ export function addActualWarehouse(data) { }) } +// 导入实际库区/库位 +export function importActualWarehouse(data) { + return request({ + url: '/wms/actualWarehouse/importData', + method: 'post', + data, + headers: { 'Content-Type': 'multipart/form-data' } + }) +} + +// 批量新增三级目录 +export function createActualWarehouseHierarchy(data) { + return request({ + url: '/wms/actualWarehouse/hierarchy', + method: 'post', + data + }) +} + // 修改实际库区/库位自关联 export function updateActualWarehouse(data) { return request({ diff --git a/klp-ui/src/assets/styles/element-ui.scss b/klp-ui/src/assets/styles/element-ui.scss index b3cf536d..001e94e2 100644 --- a/klp-ui/src/assets/styles/element-ui.scss +++ b/klp-ui/src/assets/styles/element-ui.scss @@ -793,6 +793,52 @@ body { } } +// Treeselect 样式 +.vue-treeselect { + &__control { + min-height: 24px; + border-radius: 0; + border-color: $--border-color-light; + background: linear-gradient(180deg, #fdfdff 0%, #f4f6fa 100%); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.04); + } + + &__single-value, + &__placeholder, + &__input-container { + line-height: 24px; + font-size: 12px; + color: $--color-text-regular; + } + + &__control-arrow-container { + height: 24px; + } + + &__menu { + background: $--metal-gradient-light; + border: 1px solid $--border-color-light; + border-radius: 6px; + box-shadow: $--metal-shadow; + padding: 4px 0; + } + + &__option { + color: $--color-text-regular; + padding: 6px 16px; + font-size: 13px; + + &--highlight { + background-color: rgba($--color-primary, .12); + } + + &--selected { + background-color: rgba($--color-primary, .20); + color: $--color-text-primary; + } + } +} + // 开关 .el-switch { .el-switch__core { diff --git a/klp-ui/src/components/KLPService/ActualWarehouseSelect/index.vue b/klp-ui/src/components/KLPService/ActualWarehouseSelect/index.vue index 46b9a397..f1255333 100644 --- a/klp-ui/src/components/KLPService/ActualWarehouseSelect/index.vue +++ b/klp-ui/src/components/KLPService/ActualWarehouseSelect/index.vue @@ -1,156 +1,189 @@ \ No newline at end of file + + + diff --git a/klp-ui/src/views/wms/coil/actflow.vue b/klp-ui/src/views/wms/coil/actflow.vue index 24901a43..e534b979 100644 --- a/klp-ui/src/views/wms/coil/actflow.vue +++ b/klp-ui/src/views/wms/coil/actflow.vue @@ -114,9 +114,9 @@ - + diff --git a/klp-ui/src/views/wms/coil/box2.vue b/klp-ui/src/views/wms/coil/box2.vue index 07d73678..6334a70e 100644 --- a/klp-ui/src/views/wms/coil/box2.vue +++ b/klp-ui/src/views/wms/coil/box2.vue @@ -11,7 +11,11 @@ - + diff --git a/klp-ui/src/views/wms/coil/index.vue b/klp-ui/src/views/wms/coil/index.vue index da51480b..a4c8383b 100644 --- a/klp-ui/src/views/wms/coil/index.vue +++ b/klp-ui/src/views/wms/coil/index.vue @@ -1,25 +1,212 @@ + + diff --git a/klp-ui/src/views/wms/coil/panels/base.vue b/klp-ui/src/views/wms/coil/panels/base.vue index 2768117b..e421c3ac 100644 --- a/klp-ui/src/views/wms/coil/panels/base.vue +++ b/klp-ui/src/views/wms/coil/panels/base.vue @@ -15,13 +15,13 @@ 当前数据 --> - + + style="display: inline-block;" clearable /> - + diff --git a/klp-ui/src/views/wms/coil/product.vue b/klp-ui/src/views/wms/coil/product.vue index a1234828..ed6ed298 100644 --- a/klp-ui/src/views/wms/coil/product.vue +++ b/klp-ui/src/views/wms/coil/product.vue @@ -19,7 +19,7 @@ export default { }, labelType: '3', showStatus: true, - hideType: true, + hideType: false, } } } diff --git a/klp-ui/src/views/wms/coil/split.vue b/klp-ui/src/views/wms/coil/split.vue index ed1dc55a..e30807ba 100644 --- a/klp-ui/src/views/wms/coil/split.vue +++ b/klp-ui/src/views/wms/coil/split.vue @@ -171,8 +171,12 @@ - + diff --git a/klp-ui/src/views/wms/coil/typing.vue b/klp-ui/src/views/wms/coil/typing.vue index 0117db6c..d6d8a743 100644 --- a/klp-ui/src/views/wms/coil/typing.vue +++ b/klp-ui/src/views/wms/coil/typing.vue @@ -167,8 +167,12 @@ - + diff --git a/klp-ui/src/views/wms/warehouse/real.vue b/klp-ui/src/views/wms/warehouse/real.vue index a275dbb6..59d0ad29 100644 --- a/klp-ui/src/views/wms/warehouse/real.vue +++ b/klp-ui/src/views/wms/warehouse/real.vue @@ -1,37 +1,27 @@ \ No newline at end of file + + + + diff --git a/klp-wms/src/main/java/com/klp/controller/WmsActualWarehouseController.java b/klp-wms/src/main/java/com/klp/controller/WmsActualWarehouseController.java index 8100c35a..bd094009 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsActualWarehouseController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsActualWarehouseController.java @@ -2,10 +2,13 @@ package com.klp.controller; import java.util.List; import java.util.Arrays; +import java.util.ArrayList; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; +import org.springframework.http.MediaType; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.klp.common.annotation.RepeatSubmit; @@ -16,9 +19,13 @@ import com.klp.common.core.domain.R; import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; +import com.klp.common.excel.ExcelResult; import com.klp.common.utils.poi.ExcelUtil; import com.klp.domain.vo.WmsActualWarehouseVo; +import com.klp.domain.vo.WmsActualWarehouseTreeVo; +import com.klp.domain.vo.WmsActualWarehouseImportVo; import com.klp.domain.bo.WmsActualWarehouseBo; +import com.klp.domain.bo.WmsActualWarehouseHierarchyBo; import com.klp.service.IWmsActualWarehouseService; /** @@ -44,6 +51,34 @@ public class WmsActualWarehouseController extends BaseController { return R.ok(list); } + /** + * 获取完整三级目录树 + */ + @GetMapping("/tree") + public R> tree(WmsActualWarehouseBo bo) { + return R.ok(iWmsActualWarehouseService.queryTree(bo)); + } + + /** + * 导入实际库区/库位数据 + */ + @Log(title = "实际库区/库位自关联", businessType = BusinessType.IMPORT) + @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R importData(@RequestPart("file") MultipartFile file) throws Exception { + ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), WmsActualWarehouseImportVo.class, true); + iWmsActualWarehouseService.importHierarchy(result.getList()); + return R.ok(result.getAnalysis()); + } + + /** + * 下载导入模板 + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + List template = buildTemplateData(); + ExcelUtil.exportExcel(template, "实际库区导入模板", WmsActualWarehouseImportVo.class, response); + } + /** * 导出实际库区/库位自关联列表 */ @@ -75,6 +110,15 @@ public class WmsActualWarehouseController extends BaseController { return toAjax(iWmsActualWarehouseService.insertByBo(bo)); } + /** + * 批量新增或复用层级目录 + */ + @Log(title = "实际库区/库位自关联-批量新增", businessType = BusinessType.INSERT) + @PostMapping("/hierarchy") + public R> addHierarchy(@Validated @RequestBody WmsActualWarehouseHierarchyBo bo) { + return R.ok(iWmsActualWarehouseService.createHierarchy(bo)); + } + /** * 修改实际库区/库位自关联 */ @@ -96,4 +140,30 @@ public class WmsActualWarehouseController extends BaseController { @PathVariable Long[] actualWarehouseIds) { return toAjax(iWmsActualWarehouseService.deleteWithValidByIds(Arrays.asList(actualWarehouseIds), true)); } + + private List buildTemplateData() { + List list = new ArrayList<>(); + list.add(buildRow("L1-001", "一号库区", 10L, "L1-001-A", "A通道", 10L, "L1-001-A-01", "A-01货位", 10L)); + list.add(buildRow("L1-001", "一号库区", 10L, "L1-001-A", "A通道", 10L, "L1-001-A-02", "A-02货位", 20L)); + list.add(buildRow("L1-001", "一号库区", 10L, "L1-001-B", "B通道", 20L, "L1-001-B-01", "B-01货位", 10L)); + list.add(buildRow("L1-002", "二号库区", 20L, "L1-002-A", "冷藏区", 10L, null, null, null)); + list.add(buildRow("L1-002", "二号库区", 20L, "L1-002-B", "常温区", 20L, "L1-002-B-01", "常温-01", 10L)); + return list; + } + + private WmsActualWarehouseImportVo buildRow(String l1Code, String l1Name, Long l1Sort, + String l2Code, String l2Name, Long l2Sort, + String l3Code, String l3Name, Long l3Sort) { + WmsActualWarehouseImportVo vo = new WmsActualWarehouseImportVo(); + vo.setLevelOneCode(l1Code); + vo.setLevelOneName(l1Name); + vo.setLevelOneSort(l1Sort); + vo.setLevelTwoCode(l2Code); + vo.setLevelTwoName(l2Name); + vo.setLevelTwoSort(l2Sort); + vo.setLevelThreeCode(l3Code); + vo.setLevelThreeName(l3Name); + vo.setLevelThreeSort(l3Sort); + return vo; + } } diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsActualWarehouseHierarchyBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsActualWarehouseHierarchyBo.java new file mode 100644 index 00000000..0929f743 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsActualWarehouseHierarchyBo.java @@ -0,0 +1,64 @@ +package com.klp.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.Valid; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 用于批量新增/匹配一级-三级节点的请求体 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class WmsActualWarehouseHierarchyBo implements Serializable { + + @NotEmpty(message = "三级目录数据不能为空") + @Valid + private List levels = new ArrayList<>(); + + @Data + public static class HierarchyLevel implements Serializable { + /** + * 层级:1/2/3 + */ + @NotNull(message = "层级不能为空") + @Min(value = 1, message = "层级最小为1") + @Max(value = 3, message = "层级最大为3") + private Integer level; + + /** + * 选中了已有节点时携带的ID,用于比对去重 + */ + private Long actualWarehouseId; + + /** + * 编码(当 actualWarehouseId 为空时必填) + */ + private String actualWarehouseCode; + + /** + * 名称(当 actualWarehouseId 为空时必填) + */ + private String actualWarehouseName; + + /** + * 同级排序号 + */ + private Long sortNo; + + /** + * 状态 + */ + private Integer isEnabled; + + /** + * 备注 + */ + private String remark; + } +} + diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseImportVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseImportVo.java new file mode 100644 index 00000000..31192bec --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseImportVo.java @@ -0,0 +1,41 @@ +package com.klp.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +/** + * 实际库区/库位导入模板 + */ +@Data +@ExcelIgnoreUnannotated +public class WmsActualWarehouseImportVo { + + @ExcelProperty("一级编码") + private String levelOneCode; + + @ExcelProperty("一级名称") + private String levelOneName; + + @ExcelProperty("一级排序号") + private Long levelOneSort; + + @ExcelProperty("二级编码") + private String levelTwoCode; + + @ExcelProperty("二级名称") + private String levelTwoName; + + @ExcelProperty("二级排序号") + private Long levelTwoSort; + + @ExcelProperty("三级编码") + private String levelThreeCode; + + @ExcelProperty("三级名称") + private String levelThreeName; + + @ExcelProperty("三级排序号") + private Long levelThreeSort; +} + diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseTreeVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseTreeVo.java new file mode 100644 index 00000000..4280bb61 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsActualWarehouseTreeVo.java @@ -0,0 +1,18 @@ +package com.klp.domain.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * 树形结构视图对象,用于一次性返回三级目录 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class WmsActualWarehouseTreeVo extends WmsActualWarehouseVo { + + private List children = new ArrayList<>(); +} + diff --git a/klp-wms/src/main/java/com/klp/service/IWmsActualWarehouseService.java b/klp-wms/src/main/java/com/klp/service/IWmsActualWarehouseService.java index 9805974c..2921e4bc 100644 --- a/klp-wms/src/main/java/com/klp/service/IWmsActualWarehouseService.java +++ b/klp-wms/src/main/java/com/klp/service/IWmsActualWarehouseService.java @@ -1,8 +1,10 @@ package com.klp.service; -import com.klp.domain.WmsActualWarehouse; import com.klp.domain.vo.WmsActualWarehouseVo; +import com.klp.domain.vo.WmsActualWarehouseTreeVo; +import com.klp.domain.vo.WmsActualWarehouseImportVo; import com.klp.domain.bo.WmsActualWarehouseBo; +import com.klp.domain.bo.WmsActualWarehouseHierarchyBo; import java.util.Collection; import java.util.List; @@ -26,11 +28,26 @@ public interface IWmsActualWarehouseService { */ List queryList(WmsActualWarehouseBo bo); + /** + * 查询完整的三级目录树 + */ + List queryTree(WmsActualWarehouseBo bo); + /** * 新增实际库区/库位自关联 */ Boolean insertByBo(WmsActualWarehouseBo bo); + /** + * 通过一次提交批量创建/复用三级目录 + */ + List createHierarchy(WmsActualWarehouseHierarchyBo bo); + + /** + * 导入层级目录 + */ + void importHierarchy(List importList); + /** * 修改实际库区/库位自关联 */ diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java index 262453f8..c84a0e8b 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsActualWarehouseServiceImpl.java @@ -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 queryTree(WmsActualWarehouseBo bo) { + if (bo == null) { + bo = new WmsActualWarehouseBo(); + } + LambdaQueryWrapper 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 flatList = baseMapper.selectVoList(wrapper); + Map nodeMap = new LinkedHashMap<>(); + flatList.forEach(item -> { + WmsActualWarehouseTreeVo node = new WmsActualWarehouseTreeVo(); + BeanUtil.copyProperties(item, node); + nodeMap.put(node.getActualWarehouseId(), node); + }); + List 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 buildQueryWrapper(WmsActualWarehouseBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -82,6 +117,80 @@ public class WmsActualWarehouseServiceImpl implements IWmsActualWarehouseService return baseMapper.updateById(update) > 0; } + @Override + @Transactional(rollbackFor = Exception.class) + public List createHierarchy(WmsActualWarehouseHierarchyBo bo) { + if (bo.getLevels() == null || bo.getLevels().isEmpty()) { + throw new ServiceException("层级数据不能为空"); + } + List sortedLevels = bo.getLevels().stream() + .sorted(Comparator.comparing(WmsActualWarehouseHierarchyBo.HierarchyLevel::getLevel)) + .collect(Collectors.toList()); + Long parentId = 0L; + List 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.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 importList) { + if (CollUtil.isEmpty(importList)) { + throw new ServiceException("导入数据不能为空"); + } + for (WmsActualWarehouseImportVo row : importList) { + List 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 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); + } + /** * 批量删除实际库区/库位自关联 */ diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java index 6b78f386..16103f2e 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsCoilPendingActionServiceImpl.java @@ -56,7 +56,7 @@ public class WmsCoilPendingActionServiceImpl implements IWmsCoilPendingActionSer qw.eq(bo.getCoilId() != null, "wcpa.coil_id", bo.getCoilId()); qw.like(StringUtils.isNotBlank(bo.getCurrentCoilNo()), "wcpa.current_coil_no", bo.getCurrentCoilNo()); qw.eq(bo.getActionType() != null, "wcpa.action_type", bo.getActionType()); - qw.eq(bo.getActionStatus() != null, "wcpa.action_status", bo.getActionStatus()); + qw.ne(bo.getActionStatus() != null, "wcpa.action_status",2); qw.eq(bo.getWarehouseId() != null, "wcpa.warehouse_id", bo.getWarehouseId()); qw.eq(bo.getPriority() != null, "wcpa.priority", bo.getPriority()); qw.like(StringUtils.isNotBlank(bo.getSourceType()), "wcpa.source_type", bo.getSourceType());