| src/main/java/com/ruoyi/stock/pojo/StockInRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/pojo/StockInventory.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/pojo/StockUninventory.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/stock/StockInventoryMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/stock/StockUninventoryMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -27,6 +27,9 @@ @Schema(description = "入库数量") private BigDecimal stockInNum; @Schema(description = "批号") private String batchNo; @Schema(description = "记录类型 枚举") private String recordType; src/main/java/com/ruoyi/stock/pojo/StockInventory.java
@@ -37,6 +37,9 @@ @NotBlank(message = "不能为空") private Long productModelId; @Schema(description = "批号") private String batchNo; @Schema(description = "数量") private BigDecimal qualitity; src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
@@ -33,6 +33,9 @@ @Schema(description = "入库批次") private String outboundBatches; @Schema(description = "批号") private String batchNo; @Schema(description = "入库数量") private BigDecimal stockOutNum; src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
@@ -35,6 +35,9 @@ @Schema(description = "规格id") private Long productModelId; @Schema(description = "批号") private String batchNo; @Schema(description = "数量") private BigDecimal qualitity; src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.EnumUtil; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.stock.dto.StockInRecordDto; @@ -73,22 +74,38 @@ for (Long id : ids) { StockInRecord stockInRecord = stockInRecordMapper.selectById(id); if (stockInRecord.getType().equals("0")) { StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())); LambdaQueryWrapper<StockInventory> eq = new LambdaQueryWrapper<StockInventory>() .eq(StockInventory::getProductModelId, stockInRecord.getProductModelId()); if (StringUtils.isEmpty(stockInRecord.getBatchNo())) { eq.isNull(StockInventory::getBatchNo); } else { eq.eq(StockInventory::getBatchNo, stockInRecord.getBatchNo()); } StockInventory stockInventory = stockInventoryMapper.selectOne(eq); if (stockInventory == null) { throw new BaseException("库存记录中没有对应的产品,无法删除!!!"); }else { StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setBatchNo(stockInventory.getBatchNo()); stockInRecordDto.setQualitity(stockInRecord.getStockInNum()); stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto); } }else if (stockInRecord.getType().equals("1")) { StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId())); LambdaQueryWrapper<StockUninventory> eq = new LambdaQueryWrapper<StockUninventory>() .eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId()); if (StringUtils.isEmpty(stockInRecord.getBatchNo())) { eq.isNull(StockUninventory::getBatchNo); } else { eq.eq(StockUninventory::getBatchNo, stockInRecord.getBatchNo()); } StockUninventory stockUninventory = stockUninventoryMapper.selectOne(eq); if (stockUninventory == null) { throw new BaseException("库存记录中没有对应的产品,无法删除!!!"); }else { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); stockUninventoryDto.setBatchNo(stockUninventory.getBatchNo()); stockUninventoryDto.setQualitity(stockInRecord.getStockInNum()); stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto); } src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.stock.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; @@ -8,6 +9,7 @@ import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum; import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; @@ -66,23 +68,33 @@ @Override @Transactional(rollbackFor = Exception.class) public Boolean addstockInventory(StockInventoryDto stockInventoryDto) { LambdaQueryWrapper<StockInventory> eq = new QueryWrapper<StockInventory>().lambda() .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()); if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) { eq.isNull(StockInventory::getBatchNo); stockInventoryDto.setBatchNo(null); } else { eq.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo()); } //新增入库记录再添加库存 StockInRecordDto stockInRecordDto = new StockInRecordDto(); stockInRecordDto.setRecordId(stockInventoryDto.getRecordId()); stockInRecordDto.setRecordType(stockInventoryDto.getRecordType()); stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity()); stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo()); stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); stockInRecordDto.setType("0"); stockInRecordService.add(stockInRecordDto); //再进行新增库存数量库存 //先查询库存表中的产品是否存在,不存在新增,存在更新 StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())); StockInventory oldStockInventory = stockInventoryMapper.selectOne(eq); if (ObjectUtils.isEmpty(oldStockInventory)) { StockInventory newStockInventory = new StockInventory(); newStockInventory.setProductModelId(stockInventoryDto.getProductModelId()); newStockInventory.setQualitity(stockInventoryDto.getQualitity()); newStockInventory.setVersion(1); newStockInventory.setRemark(stockInventoryDto.getRemark()); newStockInventory.setBatchNo(stockInventoryDto.getBatchNo()); newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity()); newStockInventory.setWarnNum(stockInventoryDto.getWarnNum()); stockInventoryMapper.insert(newStockInventory); @@ -96,15 +108,26 @@ @Override @Transactional(rollbackFor = Exception.class) public Boolean subtractStockInventory(StockInventoryDto stockInventoryDto) { LambdaQueryWrapper<StockInventory> eq = new QueryWrapper<StockInventory>().lambda() .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()); if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) { eq.isNull(StockInventory::getBatchNo); stockInventoryDto.setBatchNo(null); } else { eq.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo()); } // 新增出库记录 StockOutRecordDto stockOutRecordDto = new StockOutRecordDto(); stockOutRecordDto.setRecordId(stockInventoryDto.getRecordId()); stockOutRecordDto.setRecordType(stockInventoryDto.getRecordType()); stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity()); stockOutRecordDto.setBatchNo(stockInventoryDto.getBatchNo()); stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); stockOutRecordDto.setType("0"); stockOutRecordService.add(stockOutRecordDto); StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())); StockInventory oldStockInventory = stockInventoryMapper.selectOne(eq); if (ObjectUtils.isEmpty(oldStockInventory)) { throw new RuntimeException("产品库存不存在"); } @@ -145,7 +168,7 @@ // 构建查找键 String key = dto.getProductName() + "|" + dto.getModel(); SalesLedgerProduct matchedProduct = productMap.get(key); if (matchedProduct != null) { // 处理合格库存 if (dto.getQualifiedQuantity() != null && dto.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) { @@ -155,7 +178,7 @@ stockInventoryDto.setQualitity(dto.getQualifiedQuantity()); stockInventoryDto.setRemark(dto.getRemark()); stockInventoryDto.setWarnNum(dto.getWarnNum()); // 验证合格冻结数量 if (ObjectUtils.isNotEmpty(dto.getQualifiedLockedQuantity())) { if (dto.getQualifiedLockedQuantity().compareTo(dto.getQualifiedQuantity()) > 0) { @@ -165,7 +188,7 @@ } else { stockInventoryDto.setLockedQuantity(BigDecimal.ZERO); } stockInventoryDto.setProductModelId(matchedProduct.getProductModelId()); this.addstockInventory(stockInventoryDto); successCount++; @@ -178,7 +201,7 @@ stockUninventoryDto.setRecordType(StockInUnQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_IN.getCode()); stockUninventoryDto.setQualitity(dto.getUnQualifiedQuantity()); stockUninventoryDto.setRemark(dto.getRemark()); // 验证不合格冻结数量 if (ObjectUtils.isNotEmpty(dto.getUnQualifiedLockedQuantity())) { if (dto.getUnQualifiedLockedQuantity().compareTo(dto.getUnQualifiedQuantity()) > 0) { @@ -199,7 +222,7 @@ unmatchedRecords.add(unmatchedRecord); } } // 构建返回信息 StringBuilder message = new StringBuilder(); if (!unmatchedRecords.isEmpty()) { @@ -209,7 +232,7 @@ } return R.ok(message.toString()); } return R.ok("导入成功,共处理 " + successCount + " 条记录"); } catch (Exception e) { log.error("导入库存失败", e); @@ -259,4 +282,4 @@ stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity())); return this.updateById(stockInventory); } } } src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.EnumUtil; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.stock.dto.StockInventoryDto; @@ -76,23 +77,39 @@ for (Long id : ids) { StockOutRecord stockOutRecord = stockOutRecordMapper.selectById(id); if (stockOutRecord.getType().equals("0")) { StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockOutRecord.getProductModelId())); LambdaQueryWrapper<StockInventory> wrapper = new LambdaQueryWrapper<StockInventory>() .eq(StockInventory::getProductModelId, stockOutRecord.getProductModelId()); if (StringUtils.isEmpty(stockOutRecord.getBatchNo())) { wrapper.isNull(StockInventory::getBatchNo); } else { wrapper.eq(StockInventory::getBatchNo, stockOutRecord.getBatchNo()); } StockInventory stockInventory = stockInventoryMapper.selectOne(wrapper); if (stockInventory == null) { throw new BaseException("库存记录中没有对应的产品,无法删除!!!"); }else { StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setQualitity(stockOutRecord.getStockOutNum()); stockInRecordDto.setBatchNo(stockInventory.getBatchNo()); stockInventoryMapper.updateAddStockInventory(stockInRecordDto); } }else if (stockOutRecord.getType().equals("1")) { StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockOutRecord.getProductModelId())); LambdaQueryWrapper<StockUninventory> wrapper = new LambdaQueryWrapper<StockUninventory>() .eq(StockUninventory::getProductModelId, stockOutRecord.getProductModelId()); if (StringUtils.isEmpty(stockOutRecord.getBatchNo())) { wrapper.isNull(StockUninventory::getBatchNo); } else { wrapper.eq(StockUninventory::getBatchNo, stockOutRecord.getBatchNo()); } StockUninventory stockUninventory = stockUninventoryMapper.selectOne(wrapper); if (stockUninventory == null) { throw new BaseException("库存记录中没有对应的产品,无法删除!!!"); }else { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); stockUninventoryDto.setQualitity(stockOutRecord.getStockOutNum()); stockUninventoryDto.setBatchNo(stockUninventory.getBatchNo()); stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); } } src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -1,10 +1,12 @@ package com.ruoyi.stock.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.stock.dto.StockInRecordDto; import com.ruoyi.stock.dto.StockInventoryDto; @@ -12,6 +14,7 @@ import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.execl.StockUnInventoryExportData; import com.ruoyi.stock.mapper.StockUninventoryMapper; import com.ruoyi.stock.pojo.StockInventory; import com.ruoyi.stock.pojo.StockUninventory; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.stock.service.StockOutRecordService; @@ -47,22 +50,32 @@ @Override @Transactional(rollbackFor = Exception.class) public Integer addStockUninventory(StockUninventoryDto stockUninventoryDto) { LambdaQueryWrapper<StockUninventory> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()); if (StringUtils.isEmpty(stockUninventoryDto.getBatchNo())) { stockUninventoryDto.setBatchNo(null); wrapper.isNull(StockUninventory::getBatchNo); } else { wrapper.eq(StockUninventory::getBatchNo, stockUninventoryDto.getBatchNo()); } //新增入库记录再添加库存 StockInRecordDto stockInRecordDto = new StockInRecordDto(); stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId()); stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType()); stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity()); stockInRecordDto.setBatchNo(stockUninventoryDto.getBatchNo()); stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); stockInRecordDto.setType("1"); stockInRecordService.add(stockInRecordDto); //再进行新增库存数量库存 //先查询库存表中的产品是否存在,不存在新增,存在更新 StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())); StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(wrapper); if (ObjectUtils.isEmpty(oldStockUnInventory)) { StockUninventory newStockUnInventory = new StockUninventory(); newStockUnInventory.setProductModelId(stockUninventoryDto.getProductModelId()); newStockUnInventory.setQualitity(stockUninventoryDto.getQualitity()); newStockUnInventory.setLockedQuantity(stockUninventoryDto.getLockedQuantity()); newStockUnInventory.setBatchNo(stockUninventoryDto.getBatchNo()); newStockUnInventory.setVersion(1); newStockUnInventory.setRemark(stockUninventoryDto.getRemark()); stockUninventoryMapper.insert(newStockUnInventory); src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -34,6 +34,12 @@ update_time = now() </set> where product_model_id = #{ew.productModelId} <if test="ew.batchNo == null"> and batch_no is null </if> <if test="ew.batchNo != null"> and batch_no = #{ew.batchNo} </if> </update> <update id="updateSubtractStockInventory"> update stock_inventory @@ -50,6 +56,12 @@ update_time = now() </set> where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity} <if test="ew.batchNo == null"> and batch_no is null </if> <if test="ew.batchNo != null"> and batch_no = #{ew.batchNo} </if> </update> <select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto"> select si.id, @@ -87,6 +99,7 @@ INNER JOIN product_tree pt ON p.parent_id = pt.id ) select batch_no, MAX(qualifiedId) as qualifiedId, MAX(unQualifiedId) as unQualifiedId, SUM(qualifiedQuantity) as qualifiedQuantity, @@ -108,6 +121,7 @@ 'combined' as stockType from ( select si.batch_no, si.id as qualifiedId, null as unQualifiedId, si.qualitity as qualifiedQuantity, @@ -133,6 +147,7 @@ union all select su.batch_no, null as qualifiedId, su.id as unQualifiedId, 0 as qualifiedQuantity, @@ -168,7 +183,7 @@ and combined.product_id in (select id from product_tree) </if> </where> group by product_model_id, model, unit, product_name, product_id group by batch_no, product_model_id, model, unit, product_name, product_id </select> <select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData"> @@ -395,4 +410,4 @@ ORDER BY DATE(sor.create_time) ASC </select> </mapper> </mapper> src/main/resources/mapper/stock/StockUninventoryMapper.xml
@@ -25,7 +25,15 @@ </if> update_time = now() </set> where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity} where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity} <if test="ew.batchNo == null"> and batch_no is null </if> <if test="ew.batchNo != null"> and batch_no = #{ew.batchNo} </if> </update> <update id="updateAddStockUnInventory"> update stock_uninventory @@ -45,6 +53,12 @@ update_time = now() </set> where product_model_id = #{ew.productModelId} <if test="ew.batchNo == null"> and batch_no is null </if> <if test="ew.batchNo != null"> and batch_no = #{ew.batchNo} </if> </update> <select id="pageStockUninventory" resultType="com.ruoyi.stock.dto.StockUninventoryDto"> select su.id,