From f1fceb2dc64cf388bd76874b28fdd831757a1e0a Mon Sep 17 00:00:00 2001 From: zhangxuanming <2260476558@qq.com> Date: Mon, 10 Feb 2025 15:09:28 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BB=93=E5=BA=93=E3=80=81?= =?UTF-8?q?=E5=BA=93=E5=8C=BA=E5=92=8C=E5=BA=93=E4=BD=8D=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=A0=A1=E9=AA=8C=EF=BC=88=E5=BD=93=E8=BF=98?= =?UTF-8?q?=E6=9C=89=E7=9B=B8=E5=85=B3=E5=BA=93=E5=AD=98=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E5=88=A0=E9=99=A4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WmStorageAreaController.java | 4 +- .../WmStorageLocationController.java | 6 -- .../wm/controller/WmWarehouseController.java | 11 +--- .../mes/wm/mapper/WmMaterialStockMapper.java | 17 ++++++ .../mes/wm/mapper/WmStorageAreaMapper.java | 5 ++ .../ktg/mes/wm/mapper/WmWarehouseMapper.java | 7 +++ .../impl/WmMaterialStockServiceImpl.java | 30 ++++++++++ .../impl/WmStorageAreaServiceImpl.java | 46 +++++++++++++++- .../impl/WmStorageLocationServiceImpl.java | 33 +++++++++-- .../service/impl/WmWarehouseServiceImpl.java | 55 +++++++++++++++++-- .../mapper/wm/WmMaterialStockMapper.xml | 12 ++++ .../mapper/wm/WmStorageAreaMapper.xml | 16 +++++- .../resources/mapper/wm/WmWarehouseMapper.xml | 7 +++ 13 files changed, 216 insertions(+), 33 deletions(-) diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java index 309eb02..7003f27 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageAreaController.java @@ -106,8 +106,6 @@ public class WmStorageAreaController extends BaseController @DeleteMapping("/{areaIds}") public AjaxResult remove(@PathVariable Long[] areaIds) { - //TODO:库位删除之前的逻辑校验 - - return toAjax(wmStorageAreaService.deleteWmStorageAreaByAreaIds(areaIds)); + return wmStorageAreaService.deleteWmStorageAreaByAreaIds(areaIds); } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java index 068a693..88c3a10 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmStorageLocationController.java @@ -112,12 +112,6 @@ public class WmStorageLocationController extends BaseController @DeleteMapping("/{locationIds}") public AjaxResult remove(@PathVariable Long[] locationIds) { -// //TODO:库区删除之前的逻辑校验 -// -// for (Long locationId: locationIds -// ) { -// wmStorageAreaService.deleteByLocationId(locationId); -// } return wmStorageLocationService.deleteWmStorageLocationByLocationIds(locationIds); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java index 395d68e..ade061f 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/controller/WmWarehouseController.java @@ -139,15 +139,6 @@ public class WmWarehouseController extends BaseController @DeleteMapping("/{warehouseIds}") public AjaxResult remove(@PathVariable Long[] warehouseIds) { - - //TODO:仓库删除之前的逻辑校验 - - for (Long wahouseId: warehouseIds - ) { - wmStorageLocationService.deleteByWarehouseId(wahouseId); - wmStorageAreaService.deleteByWarehouseId(wahouseId); - } - - return toAjax(wmWarehouseService.deleteWmWarehouseByWarehouseIds(warehouseIds)); + return wmWarehouseService.deleteWmWarehouseByWarehouseIds(warehouseIds); } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmMaterialStockMapper.java b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmMaterialStockMapper.java index 02c27e2..71320a8 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmMaterialStockMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmMaterialStockMapper.java @@ -1,6 +1,7 @@ package com.ktg.mes.wm.mapper; import com.ktg.mes.wm.domain.WmMaterialStock; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -70,4 +71,20 @@ public interface WmMaterialStockMapper * @return 结果 */ public int deleteWmMaterialStockByMaterialStockIds(Long[] materialStockIds); + + /** + * 根据库位id查询相关库存现有量数据 + * @param areaId + * @return + */ + List getByAreaId(@Param("areaId") Long areaId); + + /** + * 根据库区id查询相关库存现有量 + * @param locationId + * @return + */ + List getLocationId(@Param("locationId") Long locationId); + + List getByWarehouseId(@Param("warehouseId") Long warehouseId); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmStorageAreaMapper.java b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmStorageAreaMapper.java index f8649d4..2b2030f 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmStorageAreaMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmStorageAreaMapper.java @@ -2,6 +2,7 @@ package com.ktg.mes.wm.mapper; import java.util.List; import com.ktg.mes.wm.domain.WmStorageArea; +import org.apache.ibatis.annotations.Param; /** * 库位设置Mapper接口 @@ -90,4 +91,8 @@ public interface WmStorageAreaMapper * @return */ public int deleteByLocationId(Long locationId); + + List selectByAreaIds(@Param("ids") Long[] areaIds); + + int deleteByLocationIds(@Param("ids") Long[] locationIds); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmWarehouseMapper.java b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmWarehouseMapper.java index 4b631d0..ec4353f 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmWarehouseMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/mapper/WmWarehouseMapper.java @@ -2,6 +2,7 @@ package com.ktg.mes.wm.mapper; import java.util.List; import com.ktg.mes.wm.domain.WmWarehouse; +import org.apache.ibatis.annotations.Param; /** * 仓库设置Mapper接口 @@ -72,4 +73,10 @@ public interface WmWarehouseMapper */ public int deleteWmWarehouseByWarehouseIds(Long[] warehouseIds); + /** + * 根据仓库id查询相关仓库数据 + * @param warehouseIds + * @return + */ + List selectByWarehouseId(@Param("ids") Long[] warehouseIds); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmMaterialStockServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmMaterialStockServiceImpl.java index cc695e0..136524f 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmMaterialStockServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmMaterialStockServiceImpl.java @@ -100,4 +100,34 @@ public class WmMaterialStockServiceImpl implements IWmMaterialStockService { return wmMaterialStockMapper.deleteWmMaterialStockByMaterialStockId(materialStockId); } + + /** + * 根据库位id查询相关库存现有量数据 + * @param areaId + * @return + */ + @Override + public List getByAreaId(Long areaId) { + return wmMaterialStockMapper.getByAreaId(areaId); + } + + /** + * 根据库区id查询相关库存现有量 + * @param locationId + * @return + */ + @Override + public List getLocationId(Long locationId) { + return wmMaterialStockMapper.getLocationId(locationId); + } + + /** + * 根据仓库id查询相关库存现有量 + * @param warehouseId + * @return + */ + @Override + public List getByWarehouseId(Long warehouseId) { + return wmMaterialStockMapper.getByWarehouseId(warehouseId); + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageAreaServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageAreaServiceImpl.java index 5abb3c9..317aa21 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageAreaServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageAreaServiceImpl.java @@ -1,7 +1,14 @@ package com.ktg.mes.wm.service.impl; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import com.ktg.common.core.domain.AjaxResult; import com.ktg.common.utils.DateUtils; +import com.ktg.mes.wm.domain.WmMaterialStock; +import com.ktg.mes.wm.service.IWmMaterialStockService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ktg.mes.wm.mapper.WmStorageAreaMapper; @@ -20,6 +27,9 @@ public class WmStorageAreaServiceImpl implements IWmStorageAreaService @Autowired private WmStorageAreaMapper wmStorageAreaMapper; + @Autowired + private IWmMaterialStockService wmMaterialStockService; + /** * 查询库位设置 * @@ -93,14 +103,39 @@ public class WmStorageAreaServiceImpl implements IWmStorageAreaService /** * 批量删除库位设置 - * + * * @param areaIds 需要删除的库位设置主键 * @return 结果 */ @Override - public int deleteWmStorageAreaByAreaIds(Long[] areaIds) + public AjaxResult deleteWmStorageAreaByAreaIds(Long[] areaIds) { - return wmStorageAreaMapper.deleteWmStorageAreaByAreaIds(areaIds); + // 查询所有删除数据 + List areaList = wmStorageAreaMapper.selectByAreaIds(areaIds); + for (WmStorageArea item : areaList) { + String areaCode = item.getAreaCode(); + if (areaCode.contains("VIRTUAL")) { + return AjaxResult.error("虚拟库位不能删除"); + } + } + + // 校验库位中是否存在物料 + for (Long areaId : areaIds) { + // 根据库位查询相关数据 + List list = wmMaterialStockService.getByAreaId(areaId); + if (list != null && list.size() > 0) { + Map> collect = list.stream() + .collect(Collectors.groupingBy(WmMaterialStock::getItemId)); + for (Long l : collect.keySet()) { + List wmMaterialStocks = collect.get(l); + BigDecimal reduce = wmMaterialStocks.stream().map(WmMaterialStock::getQuantityOnhand).reduce(BigDecimal.ZERO, BigDecimal::add); + if (!(reduce.compareTo(BigDecimal.ZERO) == 0)) { + return AjaxResult.error("库位中还有库存不能删除"); + } + } + } + } + return AjaxResult.success(wmStorageAreaMapper.deleteWmStorageAreaByAreaIds(areaIds)); } /** @@ -124,4 +159,9 @@ public class WmStorageAreaServiceImpl implements IWmStorageAreaService public int deleteByLocationId(Long locationId) { return wmStorageAreaMapper.deleteByLocationId(locationId); } + + @Override + public int deleteByLocationIds(Long[] locationIds) { + return wmStorageAreaMapper.deleteByLocationIds(locationIds); + } } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageLocationServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageLocationServiceImpl.java index d9b95bd..74d1db7 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageLocationServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmStorageLocationServiceImpl.java @@ -1,17 +1,23 @@ package com.ktg.mes.wm.service.impl; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import com.ktg.common.constant.UserConstants; import com.ktg.common.core.domain.AjaxResult; import com.ktg.common.utils.DateUtils; import com.ktg.common.utils.StringUtils; +import com.ktg.mes.wm.domain.WmMaterialStock; +import com.ktg.mes.wm.service.IWmMaterialStockService; import com.ktg.mes.wm.service.IWmStorageAreaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ktg.mes.wm.mapper.WmStorageLocationMapper; import com.ktg.mes.wm.domain.WmStorageLocation; import com.ktg.mes.wm.service.IWmStorageLocationService; +import org.springframework.transaction.annotation.Transactional; /** * 库区设置Service业务层处理 @@ -28,6 +34,9 @@ public class WmStorageLocationServiceImpl implements IWmStorageLocationService @Autowired private IWmStorageAreaService wmStorageAreaService; + @Autowired + private IWmMaterialStockService wmMaterialStockService; + /** * 查询库区设置 * @@ -110,6 +119,7 @@ public class WmStorageLocationServiceImpl implements IWmStorageLocationService * @return 结果 */ @Override + @Transactional public AjaxResult deleteWmStorageLocationByLocationIds(Long[] locationIds) { // 查询所有需要删除的数据 @@ -117,14 +127,27 @@ public class WmStorageLocationServiceImpl implements IWmStorageLocationService for (WmStorageLocation item : list) { String locationCode = item.getLocationCode(); if (locationCode.contains("VIRTUAL")) { - return AjaxResult.error("线边库库区不能被删除"); + return AjaxResult.error("虚拟库区不能被删除"); } } - - for (Long locationId: locationIds - ) { - wmStorageAreaService.deleteByLocationId(locationId); + // 校验库区中是否存在物料 + for (Long locationId : locationIds) { + // 根据库区查询相关数据 + List materialStocks = wmMaterialStockService.getLocationId(locationId); + if (materialStocks != null && materialStocks.size() > 0) { + Map> collect = materialStocks.stream() + .collect(Collectors.groupingBy(WmMaterialStock::getItemId)); + for (Long l : collect.keySet()) { + List wmMaterialStocks = collect.get(l); + BigDecimal reduce = wmMaterialStocks.stream().map(WmMaterialStock::getQuantityOnhand).reduce(BigDecimal.ZERO, BigDecimal::add); + if (!(reduce.compareTo(BigDecimal.ZERO) == 0)) { + return AjaxResult.error("库区中还有库存不能删除"); + } + } + } } + // 关联删除相关库位 + wmStorageAreaService.deleteByLocationIds(locationIds); wmStorageLocationMapper.deleteWmStorageLocationByLocationIds(locationIds); return AjaxResult.success(); } diff --git a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmWarehouseServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmWarehouseServiceImpl.java index ba4ba65..9d13b35 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmWarehouseServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/wm/service/impl/WmWarehouseServiceImpl.java @@ -1,21 +1,28 @@ package com.ktg.mes.wm.service.impl; +import java.math.BigDecimal; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import com.ktg.common.constant.UserConstants; +import com.ktg.common.core.domain.AjaxResult; import com.ktg.common.utils.DateUtils; import com.ktg.common.utils.StringUtils; +import com.ktg.mes.wm.domain.WmMaterialStock; import com.ktg.mes.wm.domain.WmStorageArea; import com.ktg.mes.wm.domain.WmStorageLocation; import com.ktg.mes.wm.mapper.WmStorageAreaMapper; import com.ktg.mes.wm.mapper.WmStorageLocationMapper; -import org.apache.catalina.User; -import org.checkerframework.checker.units.qual.A; +import com.ktg.mes.wm.service.IWmMaterialStockService; +import com.ktg.mes.wm.service.IWmStorageAreaService; +import com.ktg.mes.wm.service.IWmStorageLocationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ktg.mes.wm.mapper.WmWarehouseMapper; import com.ktg.mes.wm.domain.WmWarehouse; import com.ktg.mes.wm.service.IWmWarehouseService; +import org.springframework.transaction.annotation.Transactional; /** * 仓库设置Service业务层处理 @@ -35,6 +42,15 @@ public class WmWarehouseServiceImpl implements IWmWarehouseService @Autowired private WmStorageAreaMapper wmStorageAreaMapper; + @Autowired + private IWmMaterialStockService wmMaterialStockService; + + @Autowired + private IWmStorageLocationService wmStorageLocationService; + + @Autowired + private IWmStorageAreaService wmStorageAreaService; + /** * 查询仓库设置 * @@ -117,14 +133,43 @@ public class WmWarehouseServiceImpl implements IWmWarehouseService /** * 批量删除仓库设置 - * + * * @param warehouseIds 需要删除的仓库设置主键 * @return 结果 */ @Override - public int deleteWmWarehouseByWarehouseIds(Long[] warehouseIds) + @Transactional + public AjaxResult deleteWmWarehouseByWarehouseIds(Long[] warehouseIds) { - return wmWarehouseMapper.deleteWmWarehouseByWarehouseIds(warehouseIds); + // 查询所有需要删除的数据 + List warehouseList = wmWarehouseMapper.selectByWarehouseId(warehouseIds); + for (WmWarehouse item : warehouseList) { + String warehouseCode = item.getWarehouseCode(); + if (warehouseCode.contains("VIRTUAL")) { + return AjaxResult.error("虚拟仓库不能被删除"); + } + } + // 校验仓库中是否存在物料 + for (Long warehouseId : warehouseIds) { + // 根据仓库id查询相关数据 + List materialStocks = wmMaterialStockService.getByWarehouseId(warehouseId); + if (materialStocks != null && materialStocks.size() > 0) { + Map> collect = materialStocks.stream() + .collect(Collectors.groupingBy(WmMaterialStock::getItemId)); + for (Long l : collect.keySet()) { + List wmMaterialStocks = collect.get(l); + BigDecimal reduce = wmMaterialStocks.stream().map(WmMaterialStock::getQuantityOnhand).reduce(BigDecimal.ZERO, BigDecimal::add); + if (!(reduce.compareTo(BigDecimal.ZERO) == 0)) { + return AjaxResult.error("库区中还有库存不能删除"); + } + } + } + } + for (Long wahouseId: warehouseIds) { + wmStorageAreaService.deleteByWarehouseId(wahouseId); + wmStorageLocationService.deleteByWarehouseId(wahouseId); + } + return AjaxResult.success(wmWarehouseMapper.deleteWmWarehouseByWarehouseIds(warehouseIds)); } /** diff --git a/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml index 81bbe39..007fcce 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmMaterialStockMapper.xml @@ -144,6 +144,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and 1=1 limit 1 + + + insert into wm_material_stock diff --git a/ktg-mes/src/main/resources/mapper/wm/WmStorageAreaMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmStorageAreaMapper.xml index 06c4d50..8051f9c 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmStorageAreaMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmStorageAreaMapper.xml @@ -60,7 +60,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where area_code = #{areaCode} - + + insert into wm_storage_area @@ -169,5 +176,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" delete from wm_storage_area where location_id = #{locationId} + + delete from wm_storage_area + where location_id in + + #{item} + + \ No newline at end of file diff --git a/ktg-mes/src/main/resources/mapper/wm/WmWarehouseMapper.xml b/ktg-mes/src/main/resources/mapper/wm/WmWarehouseMapper.xml index 5b2894d..338953d 100644 --- a/ktg-mes/src/main/resources/mapper/wm/WmWarehouseMapper.xml +++ b/ktg-mes/src/main/resources/mapper/wm/WmWarehouseMapper.xml @@ -90,6 +90,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where warehouse_name = #{warehouseName} limit 1 + insert into wm_warehouse