BPOS關於「相鄰庫存查詢」的調整

  「相鄰庫存查詢」的應用場景:主要是實現門店間,相互查看商品庫存情況,但出於公司對門店的查看權限控制要求,不能一次性查看到相關店鋪的全部庫存,因此產生了「相鄰庫存查詢」的功能,經過後臺系統給指定門店定義相關聯的店倉,讓門店能夠按照單款查詢到的方式查詢到已定義的「相鄰店鋪」的商品庫存分佈情況。sql

  可是標準產品裏面設計的「相鄰庫存查詢」,因對查詢條件的匹配限制(當輸入「款號」能查詢全部尺碼的庫存分佈狀況,輸入「條碼」時只能查詢次條碼的庫存狀況),這樣的方式下降「相鄰看下查詢」的功能效果,接收不少客戶的反饋以後,從新調整自定義了相關程序(getBarcodeQtyCanByUserId_C.jsp),添加條碼解析函數(oracle數據庫自定義函數get_mpda_no_mpt),實現了掃入條碼,直接查詢全部尺碼的庫存狀況。數據庫

  

 

  修改後的jsp
  oracle

 

   自定義函數get_mpda_no_mpt的代碼app

  

create or replace function get_mpda_no_mpt(p_no in varchar2) return number as

  v_seqname varchar2(80);
  pos       number(10);
  m_pda_id  number(10);

begin

  --1條碼
  begin
    EXECUTE IMMEDIATE '
    select t.m_product_id  from m_product_alias t where t.no = :1'
      into m_pda_id
      using p_no;
  
  exception
    when no_data_found then
      m_pda_id := null;
  end;
  if m_pda_id is not null then
    return m_pda_id;
  end if;

  --2條碼
  begin
    EXECUTE IMMEDIATE '
    select t.id from m_product t where t.name = :1'
      into m_pda_id
      using p_no;
  
  exception
    when no_data_found then
      m_pda_id := null;
  end;
  if m_pda_id is not null then
    return m_pda_id;
  end if;

  --3流水碼(截取位數)
  pos := ad_param_value(37, 'portal.6001', 0);
  begin
    --raise_application_error(-20201,pos);
    FOR v IN (SELECT regexp_substr(pos, '[^,]+', 1, LEVEL, 'i') AS text
                FROM dual
              CONNECT BY LEVEL <=
                         length(pos) - length(REPLACE(pos, ',')) + 1) LOOP
      EXECUTE IMMEDIATE 'select max(m_product_id) from m_product_alias where no=:1'
        INTO m_pda_id
        USING substr(p_no, 1, length(p_no) - v.text);
      IF m_pda_id > 0 THEN
        return m_pda_id;
      END IF;
    END LOOP;
  exception
    when no_data_found then
      m_pda_id := null;
  end;
  if m_pda_id is not null then
    return m_pda_id;
  end if;

  --4國標碼
  begin
    EXECUTE IMMEDIATE '
    select t.m_product_id
      from m_product_alias t
     where t.INTSCODE = :1'
      into m_pda_id
      using p_no;
  exception
    when no_data_found then
      m_pda_id := null;
  end;
  if m_pda_id is not null then
    return m_pda_id;
  end if;

  --5新舊條碼對照
  begin
    EXECUTE IMMEDIATE '
    select a.m_product_id
      from m_pdt_alias_con t, m_product_alias g,m_product_alias a
     where t.m_pda_old_id = g.id
     and t.m_pda_new_id=a.id
       and g.no = :1'
      into m_pda_id
      using p_no;
  
  exception
    when no_data_found then
      m_pda_id := null;
  end;

  if m_pda_id is not null then
    return m_pda_id;
  end if;

  return m_pda_id;

end;

   後臺「相鄰店鋪」維護調整,標準的「相鄰店鋪」維護只能是一一對應維護,例如定義A店鋪的「相鄰店鋪」爲B、C店鋪,則須要再A店鋪的店倉檔案下的「相鄰店鋪」table也頁添加B、C店鋪後,再到B、C店鋪的店倉檔案下添加A店鋪,維護起來非常不方便。jsp

  解決方案:經過給店倉檔案添加新的標籤,修改對應的店倉檔案程序,在對店倉檔案修改的時候,識別將統一標籤的店倉直接相互更新到對應的「相鄰店鋪」。
函數

 

 

 1  /*根據店倉性質更新相鄰店鋪*/
 2   --先刪除原明細
 3   delete from C_STORENEB;
 4 
 5   for v in (select a.id, a.c_storekind_id
 6               from c_store a
 7              where a.isactive='Y') loop
 8   
 9     --插入新的明細 
10     insert into C_STORENEB t
11       (id,
12        ad_client_id,
13        ad_org_id,
14        c_neb_store_id,
15        c_store_id,
16        ownerid,
17        modifierid,
18        creationdate,
19        modifieddate,
20        isactive)
21       select get_sequences('C_STORENEB'),
22              a.ad_client_id,
23              a.ad_org_id,
24              a.id,
25              v.id,
26              ownerid,
27              modifierid,
28              creationdate,
29              modifieddate,
30              isactive
31         from c_store a
32        where a.isactive='Y';
33   end loop;
相關文章
相關標籤/搜索