Class ImportService

java.lang.Object
ru.bgcrm.dao.CommonDAO
org.bgerp.plugin.inventoru.sync1c.service.ImportService

public class ImportService extends CommonDAO
Imports stock data from 1C into BGERP inventory tables. For each EngineerWarehouse: 1. Calls Api1cClient.getStocks(warehouseName, locationName) 2. Upserts inventoru_item (by ext_id param = product_id) 3. Upserts inventoru_store (by ext_id param = warehouse_id), links to engineer_warehouse.store_id 4. Writes to inventoru_sync1c_import_pending (NOT directly to inventoru_balance). The warehouse owner must confirm in user UI to apply balances. 5. Zeroes out items previously known at this store that are absent from the batch — per the 1C API contract, an exhausted (qty=0) item is omitted from the response entirely rather than sent with quantity=0 (see ImportPendingDAO.getKnownItemIds(int, int)).
  • Constructor Details

    • ImportService

      public ImportService(Connection con)
  • Method Details

    • syncEngineerWarehouse

      public int syncEngineerWarehouse(Sync1cConnector instance, EngineerWarehouse ew)
      Runs import for one engineer warehouse mapping over the connector's protocol: HS — Api1cClient.getStocks(warehouseName, locationName); OData — ODataClient with the mapping's warehouseId as the 1C warehouse GUID filter; mappings without a real GUID (e.g. manual ones) are skipped. Logs progress to inventoru_sync1c_import_log.
      Returns:
      number of items synced; -1 on API error
    • importFromRows

      public int importFromRows(Sync1cConnector instance, EngineerWarehouse ew, List<Api1cStock> stocks)
      Applies a list of stock rows (already fetched, protocol-agnostic — same shape regardless of whether they came from the HS API, a parsed CSV file, or (in the future) an inbound EPF push) for one engineer warehouse mapping: upserts item/store, writes to inventoru_sync1c_import_pending, logs to inventoru_sync1c_import_log.
      Returns:
      number of items synced; -1 on error
    • importFromRows

      public int importFromRows(Sync1cConnector instance, EngineerWarehouse ew, List<Api1cStock> stocks, Set<String> untouched)
      Parameters:
      untouched - product ids the source has but the person left out of this import (unticked in the preview): their positions are neither proposed nor taken for gone — before, leaving a row out made its position "missing" and proposed to zero it
    • importBarcodes

      public int importBarcodes(Sync1cConnector instance)
      Imports the nomenclature barcode register from an OData connector into inventoru_item_barcode. Only barcodes whose item GUID resolves to an existing ERP item via the connector's ext_id parameter are stored — unknown items are skipped (they'll resolve on a later run, after the stock import has created them).
      Returns:
      number of barcodes upserted; -1 on error
    • receiveRows

      public ImportService.Received receiveRows(Sync1cConnector instance, int storeId, List<Api1cStock> stocks, int userId) throws Exception
      Receives the rows onto the store as they are: each is a receipt — the "add" mode of a file upload, for goods that came in. Not a reconciliation, so nothing is proposed and nothing absent is taken for gone. Positions are found or created as by the import. A serial tracked position is received unit by unit: a row needs its serial and a quantity of one, and a serial may appear once. All rows are checked before anything is written — a position is not even created — and the writes run in a savepoint rolled back on a refusal, so a refused file leaves nothing behind. Rows with no quantity are skipped and counted.
      Throws:
      Exception