fix(stock): 修复库存盘点计划中的出入库记录类型错误
- 修正库存盘点计划中差异数量大于0时应为入库记录类型,小于0时应为出库记录类型
- 更新库存记录时使用绝对值作为数量参数确保正确定义库存变动
- 在库存盘点完成后添加库存锁定状态更新功能
- 修正StockUtils工具类中的subtractStock方法调用为addStockOutRecordOnly
- 修改addStockOutRecordOnly方法返回类型从Boolean改为StockOutRecordDto以正确返回记录信息
- 新增updateLocked方法用于更新库存锁定状态,支持按产品型号和批次号进行锁定操作
| | |
| | | stockInventoryDto.setQualitity(quantity); |
| | | stockInventoryDto.setProductModelId(productModelId); |
| | | stockInventoryDto.setBatchNo(batchNo); |
| | | return stockInventoryService.subtractStockInventory(stockInventoryDto); |
| | | return stockInventoryService.addStockOutRecordOnly(stockInventoryDto); |
| | | } |
| | | |
| | | //不合格库存删除 |
| | |
| | | List<StockInventoryDto> selectStockInvenrory(Long productModelId); |
| | | |
| | | IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, @Param("ew") StockInventoryDto stockInventoryDto); |
| | | |
| | | int updateLocked(@Param("productModelId") Long productModelId, @Param("batchNo") String batchNo, @Param("locked") boolean b); |
| | | } |
| | |
| | | import com.ruoyi.stock.dto.StockOutRecordDto; |
| | | import com.ruoyi.stock.pojo.StockInventory; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.constraints.NotBlank; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.util.List; |
| | |
| | | |
| | | StockInRecordDto addStockInRecordOnly(StockInventoryDto stockInventoryDto); |
| | | |
| | | Boolean addStockOutRecordOnly(StockInventoryDto stockInventoryDto); |
| | | StockOutRecordDto addStockOutRecordOnly(StockInventoryDto stockInventoryDto); |
| | | |
| | | R importStockInventory(MultipartFile file); |
| | | |
| | |
| | | List<StockInventoryDto> selectStockInvenrory(Long productModelId); |
| | | |
| | | IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, StockInventoryDto stockInventoryDto); |
| | | |
| | | boolean updateLocked(@NotBlank(message = "不能为空") Long productModelId, String batchNo, boolean b); |
| | | } |
| | |
| | | stockInventoryDto.setRecordId(stockInventoryCheckPlanDto.getId()); |
| | | |
| | | if (item.getDifferenceQuantity().compareTo(BigDecimal.ZERO) > 0) { |
| | | stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_OUT.getCode()); |
| | | StockInRecordDto stockInRecordDto = stockUtils.addStockWithBatchNo(stockInventoryDto.getProductModelId(), stockInventoryDto.getQualitity(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo()); |
| | | stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_IN.getCode()); |
| | | StockInRecordDto stockInRecordDto = stockUtils.addStockWithBatchNo(stockInventoryDto.getProductModelId(), item.getDifferenceQuantity().abs (), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo()); |
| | | //直接审核通过 |
| | | stockInRecordService.batchApprove(Collections.singletonList(stockInRecordDto.getId()), 1); |
| | | }else { |
| | | stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_IN.getCode()); |
| | | StockOutRecordDto stockOutRecordDto = stockUtils.substractStock(stockInventoryDto.getProductModelId(), stockInventoryDto.getQualitity(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo()); |
| | | stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_OUT.getCode()); |
| | | StockOutRecordDto stock = stockUtils.substractStock(stockInventoryDto.getProductModelId(), item.getDifferenceQuantity().abs(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo()); |
| | | //直接审核通过 |
| | | stockOutRecordService.batchApprove(Collections.singletonList(stockOutRecordDto.getId()), 1); |
| | | |
| | | stockOutRecordService.batchApprove(Collections.singletonList(stock.getId()), 1); |
| | | } |
| | | //更新库存锁定状态 |
| | | stockInventoryService.updateLocked(stockInventoryDto.getProductModelId(),stockInventoryDto.getBatchNo(), true); |
| | | } |
| | | stockInventoryCheckItemMapper.updateById(stockInventoryCheckPlanDto.getCheckItems()); |
| | | plan.setStatus(2); |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean addStockOutRecordOnly(StockInventoryDto stockInventoryDto) { |
| | | public StockOutRecordDto addStockOutRecordOnly(StockInventoryDto stockInventoryDto) { |
| | | LambdaQueryWrapper<StockInventory> eq = new LambdaQueryWrapper<>(); |
| | | eq.eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()); |
| | | if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) { |
| | |
| | | stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId()); |
| | | stockOutRecordDto.setType("0"); |
| | | stockOutRecordDto.setRemark(stockInventoryDto.getRemark()); |
| | | stockOutRecordService.add(stockOutRecordDto); |
| | | return true; |
| | | Long add = stockOutRecordService.add(stockOutRecordDto); |
| | | stockInventoryDto.setId(add); |
| | | return stockOutRecordDto; |
| | | } |
| | | |
| | | @Override |
| | |
| | | public IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, StockInventoryDto stockInventoryDto) { |
| | | return stockInventoryMapper.pagestockInventoryNoQua(page, stockInventoryDto); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateLocked(Long productModelId, String batchNo, boolean b) { |
| | | return stockInventoryMapper.updateLocked(productModelId, batchNo, b) > 0; |
| | | } |
| | | } |
| | |
| | | and batch_no = #{ew.batchNo} |
| | | </if> |
| | | </update> |
| | | <update id="updateLocked"> |
| | | update stock_inventory |
| | | set locked = #{locked} |
| | | where product_model_id = #{ew.productModelId} |
| | | <if test="batchNo == null"> |
| | | and batch_no is null |
| | | </if> |
| | | <if test="batchNo != null"> |
| | | and batch_no = #{ew.batchNo} |
| | | </if> |
| | | </update> |
| | | <select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto"> |
| | | select si.id, |
| | | si.qualitity, |