From 828d33a72445146fbfb980b5f48094fd1bdb698a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 25 Jun 2026 18:47:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(receive):=20=E6=B7=BB=E5=8A=A0=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=8A=A5=E5=BA=9F=E5=8A=9F=E8=83=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增库存报废查询对象 InventoryScrappingQO - 创建 OAController 提供库存报废接口 - 实现库存报废业务逻辑,包括库存校验和出库操作 - 新增库存报废记录实体 WmsInventoryScrappingRecord - 添加库存报废记录服务接口及实现类 - 集成 FIFO 库存获取和批量出库功能 --- .../entity/WmsInventoryScrappingRecord.java | 64 +++++++++++++++++ .../WmsInventoryScrappingRecordMapper.java | 16 +++++ .../IWmsInventoryScrappingRecordService.java | 16 +++++ ...msInventoryScrappingRecordServiceImpl.java | 20 ++++++ .../srm/receive/controller/OAController.java | 70 +++++++++++++++++++ .../receive/pojo/qo/InventoryScrappingQO.java | 40 +++++++++++ 6 files changed, 226 insertions(+) create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInventoryScrappingRecord.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInventoryScrappingRecordMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInventoryScrappingRecordService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInventoryScrappingRecordServiceImpl.java create mode 100644 nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/OAController.java create mode 100644 nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/pojo/qo/InventoryScrappingQO.java diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInventoryScrappingRecord.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInventoryScrappingRecord.java new file mode 100644 index 00000000..c4c336a7 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsInventoryScrappingRecord.java @@ -0,0 +1,64 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * 库存报废记录 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("wms_inventory_scrapping_record") +public class WmsInventoryScrappingRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 工厂编号 + */ + private String factoryNo; + + /** + * 仓库编号 + */ + private String warehouseNo; + + /** + * 数量 + */ + private BigDecimal num; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInventoryScrappingRecordMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInventoryScrappingRecordMapper.java new file mode 100644 index 00000000..11f2e63a --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsInventoryScrappingRecordMapper.java @@ -0,0 +1,16 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.repository.entity.WmsInventoryScrappingRecord; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface WmsInventoryScrappingRecordMapper extends BaseMapper { + +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInventoryScrappingRecordService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInventoryScrappingRecordService.java new file mode 100644 index 00000000..bd03a778 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsInventoryScrappingRecordService.java @@ -0,0 +1,16 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.repository.entity.WmsInventoryScrappingRecord; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IWmsInventoryScrappingRecordService extends IService { + +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInventoryScrappingRecordServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInventoryScrappingRecordServiceImpl.java new file mode 100644 index 00000000..47b98a03 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsInventoryScrappingRecordServiceImpl.java @@ -0,0 +1,20 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.repository.entity.WmsInventoryScrappingRecord; +import com.nflg.wms.repository.mapper.WmsInventoryScrappingRecordMapper; +import com.nflg.wms.repository.service.IWmsInventoryScrappingRecordService; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class WmsInventoryScrappingRecordServiceImpl extends ServiceImpl implements IWmsInventoryScrappingRecordService { + +} diff --git a/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/OAController.java b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/OAController.java new file mode 100644 index 00000000..d3016b5c --- /dev/null +++ b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/controller/OAController.java @@ -0,0 +1,70 @@ +package com.nflg.wms.srm.receive.controller; + +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.dto.InventoryOutDTO; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.WmsInventory; +import com.nflg.wms.repository.entity.WmsInventoryScrappingRecord; +import com.nflg.wms.repository.service.IWmsInventoryScrappingRecordService; +import com.nflg.wms.repository.service.IWmsInventoryService; +import com.nflg.wms.srm.receive.pojo.qo.InventoryScrappingQO; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 接收oa推送数据 + */ +@Slf4j +@RestController +@RequestMapping("/oa") +public class OAController extends BaseController { + + @Resource + private IWmsInventoryService inventoryService; + + @Resource + private IWmsInventoryScrappingRecordService inventoryScrappingRecordService; + + /** + * 库存报废 + */ + @Transactional + @PostMapping("/inventory/scrapping") + public ApiResult inventoryScrapping(@Valid @RequestBody @NotNull InventoryScrappingQO qo) { + List inventories = inventoryService.getForOutFIFO(qo.getFactoryNo(), qo.getWarehouseNo(), List.of(qo.getMaterialNo())); + VUtil.trueThrowBusinessError(inventories.stream().map(WmsInventory::getNum).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(qo.getNum()) < 0) + .throwMessage("库存不足"); + inventoryService.out(inventories.stream() + .map(inventory -> new InventoryOutDTO() + .setFactoryNo(inventory.getFactoryNo()) + .setWarehouseNo(inventory.getWarehouseNo()) + .setBatchNo(inventory.getBatchNo()) + .setBinLocation(inventory.getBinLocation()) + .setSerialNo(inventory.getSerialNo()) + .setNum(qo.getNum()) + ) + .toList() + ); + inventoryScrappingRecordService.save(new WmsInventoryScrappingRecord() + .setFactoryNo(qo.getFactoryNo()) + .setWarehouseNo(qo.getWarehouseNo()) + .setMaterialNo(qo.getMaterialNo()) + .setNum(qo.getNum()) + .setRemark(qo.getRemark()) + .setCreateTime(LocalDateTime.now()) + ); + return ApiResult.success(); + } +} diff --git a/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/pojo/qo/InventoryScrappingQO.java b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/pojo/qo/InventoryScrappingQO.java new file mode 100644 index 00000000..62361a02 --- /dev/null +++ b/nflg-wms-srm-receive/src/main/java/com/nflg/wms/srm/receive/pojo/qo/InventoryScrappingQO.java @@ -0,0 +1,40 @@ +package com.nflg.wms.srm.receive.pojo.qo; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class InventoryScrappingQO { + + /** + * 工厂编码 + */ + @NotBlank + private String factoryNo; + + /** + * 仓库编码 + */ + @NotBlank + private String warehouseNo; + + /** + * 物料编码 + */ + @NotBlank + private String materialNo; + + /** + * 数量 + */ + @NotNull + private BigDecimal num; + + /** + * 备注 + */ + private String remark; +}