From c327a8032fd7fa9d0421e7ba0e6c94cbe6f660f1 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Mon, 30 Dec 2024 16:00:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0=EF=BC=9A?= =?UTF-8?q?=201.=20=E9=97=B4=E6=8E=A5=E7=89=A9=E6=96=99=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wms/controller/GoodsController.java | 98 +++++++++++++++++++ .../wms/controller/LocationController.java | 24 ++++- .../com/wms/controller/StockController.java | 10 ++ .../wms/entity/app/request/LocationQuery.java | 5 + .../wms/entity/app/request/StockQuery.java | 6 ++ .../wms/entity/app/request/VehicleQuery.java | 17 +++- .../com/wms/entity/app/vo/LocationVo.java | 5 + 7 files changed, 160 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/wms/controller/GoodsController.java b/src/main/java/com/wms/controller/GoodsController.java index 514b920..636e848 100644 --- a/src/main/java/com/wms/controller/GoodsController.java +++ b/src/main/java/com/wms/controller/GoodsController.java @@ -10,10 +10,17 @@ import com.wms.constants.enums.ResponseCode; import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.dto.GoodsDto; import com.wms.entity.app.dto.PageDto; +import com.wms.entity.app.dto.extend.VehicleDetailInfo; import com.wms.entity.app.request.GoodsQuery; import com.wms.entity.app.vo.GoodsVo; import com.wms.entity.table.Goods; +import com.wms.entity.table.Location; +import com.wms.entity.table.Stock; +import com.wms.entity.table.Vehicle; import com.wms.service.GoodsService; +import com.wms.service.LocationService; +import com.wms.service.StockService; +import com.wms.service.VehicleService; import com.wms.utils.HttpUtils; import com.wms.utils.StringUtils; import jakarta.servlet.http.HttpServletRequest; @@ -33,6 +40,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import static com.wms.constants.WmsConstants.MYSQL_JSON_CI; import static com.wms.utils.StringUtils.convertJsonString; /** @@ -57,6 +65,10 @@ public class GoodsController { */ private final HttpServletRequest servletRequest; + private final LocationService locationService;// 库位服务 + private final VehicleService vehicleService;// 料箱服务 + private final StockService stockService;// 库存服务 + /** * 查找所有物料 */ @@ -292,4 +304,90 @@ public class GoodsController { return convertJsonString(rsp); } } + + /** + * 一键设置间接物料相关信息 + * + * @param goodsQuery 参数 + * @return 结果 + */ + @PostMapping("/updateIndirectInfos") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updateIndirectInfos(@RequestBody GoodsQuery goodsQuery) { + logger.info("接收到一键设置间接物料信息请求:{},请求ip地址:{}", convertJsonString(goodsQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity rsp = new ResponseEntity(); + try { + // 查找4排到8排,57列到64列的所有库位 + List allIndirectLocations = locationService.list(new LambdaQueryWrapper() + .between(Location::getWRow, 4, 8) + .between(Location::getWCol, 57, 64)); + for (Location location : allIndirectLocations) { + location.setGoodsType("间接物料"); + } + // 更新间接物料所用库位 + locationService.updateBatchById(allIndirectLocations); + // 查询物料表,获取所有的间接物料信息 + List allIndirectGoods = goodsService.list(new LambdaQueryWrapper() + .eq(Goods::getGoodsType, "间接物料")); + if (allIndirectGoods == null || allIndirectGoods.isEmpty()) { + logger.error("没有间接物料信息。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("没有间接物料信息。"); + return convertJsonString(rsp); + } + List goodsIds = allIndirectGoods.stream().map(Goods::getGoodsId).toList(); + // 查找到所有包含这些物料的库存 + if (!goodsIds.isEmpty()) { + StringBuilder goodsSqlString = new StringBuilder(); + for (String goodsId : goodsIds) { + if (StringUtils.isEmpty(goodsSqlString.toString())) { + goodsSqlString.append("(goods_related ->> '$.goodsId' in (\"").append(goodsId).append("\""); + } else { + goodsSqlString.append(",\"").append(goodsId).append("\""); + } + } + goodsSqlString.append("))"); + List allIndirectStock = stockService.list(new LambdaQueryWrapper() + .apply(goodsSqlString + MYSQL_JSON_CI)); + List vehicleIds = new ArrayList<>(); + for (Stock stock : allIndirectStock) { + stock.setGoodsType("间接物料"); + if (!vehicleIds.contains(stock.getVehicleId())) { + vehicleIds.add(stock.getVehicleId()); + } + } + // 更新库存表 + stockService.updateBatchById(allIndirectStock); + // 更新料箱表 + List allIndirectVehicles = vehicleService.list(new LambdaQueryWrapper() + .in(Vehicle::getVehicleId, vehicleIds)); + for (Vehicle vehicle : allIndirectVehicles) { + vehicle.setVehicleType("间接物料"); + // 找到这个料箱包含的库存物料列表 + List indirectStocksOfVehicle = allIndirectStock.stream().filter(stock -> stock.getVehicleId().equals(vehicle.getVehicleId())).toList(); + List details = new ArrayList<>(); + for (Stock stock : indirectStocksOfVehicle) { + details.add(new VehicleDetailInfo(stock.getGoodsRelated().getGoodsId())); + } + vehicle.setDetails(details); + } + // 更新料箱 + vehicleService.updateBatchById(allIndirectVehicles); + } + + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("一键设置成功。"); + return convertJsonString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + // 返回其他异常 + logger.error("一键设置发生异常:{}", e.getMessage()); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("一键设置发生异常。"); + return convertJsonString(rsp); + } + } } diff --git a/src/main/java/com/wms/controller/LocationController.java b/src/main/java/com/wms/controller/LocationController.java index 01313c1..d9b9a30 100644 --- a/src/main/java/com/wms/controller/LocationController.java +++ b/src/main/java/com/wms/controller/LocationController.java @@ -96,11 +96,19 @@ public class LocationController { ResponseEntity response = new ResponseEntity(); try { Page page = locationQuery.toMpPage(); - Page locationPage = locationService.page(page, new LambdaQueryWrapper() + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .like(StringUtils.isNotEmpty(locationQuery.getLocationId()), Location::getLocationId, locationQuery.getLocationId()) .like(StringUtils.isNotEmpty(locationQuery.getVehicleId()), Location::getVehicleId, locationQuery.getVehicleId()) .eq(locationQuery.getLocationStatus() != null, Location::getLocationStatus, locationQuery.getLocationStatus()) - .eq(locationQuery.getIsLock() != null, Location::getIsLock, locationQuery.getIsLock())); + .eq(locationQuery.getIsLock() != null, Location::getIsLock, locationQuery.getIsLock()); + if (StringUtils.isNotEmpty(locationQuery.getGoodsType())) { + if (locationQuery.getGoodsType().equals("间接物料")) { + queryWrapper.eq(Location::getGoodsType, "间接物料"); + } else { + queryWrapper.ne(Location::getGoodsType, "间接物料"); + } + } + Page locationPage = locationService.page(page, queryWrapper); PageDto pageDto = PageDto.of(locationPage, location -> BeanUtil.copyProperties(location, LocationVo.class)); response.setCode(ResponseCode.OK.getCode()); @@ -299,12 +307,20 @@ public class LocationController { ResponseEntity response = new ResponseEntity(); try { Page page = vehicleQuery.toMpPage(); - Page vehiclePage = vehicleService.page(page, new LambdaQueryWrapper() + LambdaQueryWrapper vehicleLambdaQueryWrapper = new LambdaQueryWrapper() .like(StringUtils.isNotEmpty(vehicleQuery.getVehicleId()), Vehicle::getVehicleId, vehicleQuery.getVehicleId()) .like(StringUtils.isNotEmpty(vehicleQuery.getCurrentLocation()), Vehicle::getCurrentLocation, vehicleQuery.getCurrentLocation()) .eq(vehicleQuery.getVehicleStatus() != null, Vehicle::getVehicleStatus, vehicleQuery.getVehicleStatus()) .eq(vehicleQuery.getIsEmpty() != null, Vehicle::getIsEmpty, vehicleQuery.getIsEmpty()) - .orderByDesc(Vehicle::getLastInTime)); + .orderByDesc(Vehicle::getLastInTime); + if (StringUtils.isNotEmpty(vehicleQuery.getVehicleType())) { + if (vehicleQuery.getVehicleType().equals("间接物料")) { + vehicleLambdaQueryWrapper.eq(Vehicle::getVehicleType, "间接物料"); + } else { + vehicleLambdaQueryWrapper.ne(Vehicle::getVehicleType, "间接物料"); + } + } + Page vehiclePage = vehicleService.page(page, vehicleLambdaQueryWrapper); PageDto pageDto = PageDto.of(vehiclePage, vehicle -> BeanUtil.copyProperties(vehicle, VehicleVO.class)); response.setCode(ResponseCode.OK.getCode()); diff --git a/src/main/java/com/wms/controller/StockController.java b/src/main/java/com/wms/controller/StockController.java index 8e032b1..9bbf543 100644 --- a/src/main/java/com/wms/controller/StockController.java +++ b/src/main/java/com/wms/controller/StockController.java @@ -114,6 +114,13 @@ public class StockController { .apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')" + MYSQL_JSON_CI, stockQuery.getGoodsName()) .orderByDesc(Stock::getLastUpdateTime); + if (StringUtils.isNotEmpty(stockQuery.getGoodsType())) { + if (stockQuery.getGoodsType().equals("间接物料")) { + lambdaQueryWrapper.eq(Stock::getGoodsType, "间接物料"); + } else { + lambdaQueryWrapper.ne(Stock::getGoodsType, "间接物料"); + } + } if (stockQuery.getCreateTime() != null) { lambdaQueryWrapper.between(Stock::getCreateTime, stockQuery.getCreateTime().toLocalDate().atStartOfDay(), stockQuery.getCreateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); } @@ -249,6 +256,9 @@ public class StockController { goodsRelated.setGoodsStatus(stockQuery.getGoodsStatus()); updatingStock.setGoodsRelated(goodsRelated); } + if (StringUtils.isNotEmpty(stockQuery.getGoodsType())) { + updatingStock.setGoodsType(stockQuery.getGoodsType().equals("间接物料") ? "间接物料" : ""); + } // 更新库存 if (stockService.update(updatingStock, stockLambdaQueryWrapper)) { stockUpdateRecordService.addStockUpdateRecord(stockBefore, updatingStock, StockUpdateReasonEnum.UPDATE_CLIENT.getReason(), stockQuery.getUserName(), quantityBefore); diff --git a/src/main/java/com/wms/entity/app/request/LocationQuery.java b/src/main/java/com/wms/entity/app/request/LocationQuery.java index 048e0e9..e88aa6e 100644 --- a/src/main/java/com/wms/entity/app/request/LocationQuery.java +++ b/src/main/java/com/wms/entity/app/request/LocationQuery.java @@ -67,6 +67,11 @@ public class LocationQuery extends PageQuery { */ @JsonProperty("vehicleId") private String vehicleId; + /** + * 物料类型 + */ + @JsonProperty("goodsType") + private String goodsType; /** * 将locationQuery转化为LocationPO diff --git a/src/main/java/com/wms/entity/app/request/StockQuery.java b/src/main/java/com/wms/entity/app/request/StockQuery.java index 4fc308b..9cc1553 100644 --- a/src/main/java/com/wms/entity/app/request/StockQuery.java +++ b/src/main/java/com/wms/entity/app/request/StockQuery.java @@ -102,6 +102,11 @@ public class StockQuery extends PageQuery { */ @JsonProperty("totalNum") private BigDecimal totalNum; + /** + * 入库库存总数 + */ + @JsonProperty("goodsType") + private String goodsType; /** * 转化为库存Po @@ -120,6 +125,7 @@ public class StockQuery extends PageQuery { stockPo.setIsInventory(this.isInventory); stockPo.setInventoryTaskId(this.inventoryTaskId); stockPo.setNoUseDays(this.noUseDays); + stockPo.setGoodsType(this.goodsType); StockDetailInfo goodsRelated = new StockDetailInfo(); goodsRelated.setGoodsId(this.goodsId); goodsRelated.setGoodsName(this.goodsName); diff --git a/src/main/java/com/wms/entity/app/request/VehicleQuery.java b/src/main/java/com/wms/entity/app/request/VehicleQuery.java index b6b4c65..44f7b22 100644 --- a/src/main/java/com/wms/entity/app/request/VehicleQuery.java +++ b/src/main/java/com/wms/entity/app/request/VehicleQuery.java @@ -1,10 +1,15 @@ package com.wms.entity.app.request; +import com.alibaba.fastjson2.JSON; import com.fasterxml.jackson.annotation.JsonProperty; +import com.wms.entity.app.dto.extend.VehicleDetailInfo; import com.wms.entity.table.Vehicle; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.List; +import java.util.Objects; + /** * 载具查询 */ @@ -36,6 +41,11 @@ public class VehicleQuery extends PageQuery { */ @JsonProperty("currentLocation") private String currentLocation; + /** + * 额外信息 + */ + @JsonProperty("details") + private String details; /** * 将VehicleQuery转化为VehiclePO @@ -47,7 +57,12 @@ public class VehicleQuery extends PageQuery { vehiclePO.setVehicleStatus(vehicleStatus); vehiclePO.setIsEmpty(isEmpty); vehiclePO.setCurrentLocation(currentLocation); - vehiclePO.setVehicleType(vehicleType); + if (Objects.equals(vehicleType, "间接物料")) { + vehiclePO.setVehicleType("间接物料"); + } else { + vehiclePO.setVehicleType(""); + } + vehiclePO.setDetails(JSON.parseArray(details, VehicleDetailInfo.class)); return vehiclePO; } diff --git a/src/main/java/com/wms/entity/app/vo/LocationVo.java b/src/main/java/com/wms/entity/app/vo/LocationVo.java index a190d21..0f55a0f 100644 --- a/src/main/java/com/wms/entity/app/vo/LocationVo.java +++ b/src/main/java/com/wms/entity/app/vo/LocationVo.java @@ -60,4 +60,9 @@ public class LocationVo { */ @JsonProperty("vehicleId") private String vehicleId; + /** + * 物料类型 + */ + @JsonProperty("goodsType") + private String goodsType; }