“相邻库存查询”的应用场景:主要是实现门店间,相互查看商品库存状况,但出于公司对门店的查看权限控制要求,不能一次性查看到相关店铺的所有库存,所以产生了“相邻库存查询”的功能,通过后台系统给指定门店定义相关联的店仓,让门店可以按照单款查询到的方式查询到已定义的“相邻店铺”的商品库存分布状况。

  但是标准产品里面设计的“相邻库存查询”,因对查询条件的匹配限制(当输入“款号”能查询所有尺码的库存分布情况,输入“条码”时只能查询次条码的库存情况),这样的方式降低“相邻看下查询”的功能效果,接收很多客户的反馈之后,重新调整自定义了相关程序(getBarcodeQtyCanByUserId_C.jsp),添加条码解析函数(oracle数据库自定义函数get_mpda_no_mpt),实现了扫入条码,直接查询所有尺码的库存情况。

  

  修改后的jsp
  

  自定义函数get_mpda_no_mpt的代码

  

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店铺,维护起来很是不方便。

  解决方案:通过给店仓档案添加新的标签,修改对应的店仓档案程序,在对店仓档案修改的时候,识别将统一标签的店仓直接相互更新到对应的“相邻店铺”。

 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;

BPOS关于“相邻库存查询”的调整的更多相关文章

  1. Hamilton回路的判定与构造

    定理1:在一个具有n个顶点的无向连通图G中,如果任意两个顶点的度数之和大于n,则G具有Hamilton回路.此条件为充分条件 定理2:设图G = <V,E>,是Hamilton图,则对于v ...

  2. 8大排序算法的java实现--做个人收藏

    排序算法分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为数据量太大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.这里只讨论内部排序,常见的内部排序算法有:插入排序 ...

  3. Careercup | Chapter 3

    3.1 Describe how you could use a single array to implement three stacks. Flexible Divisions的方案,当某个栈满 ...

  4. tmux 入门教程

    tmux 本教程是基于ACWing的<Linux基础课>所做,希望大家支持ACWing 功能 分屏 当需要同时运行两个终端,并且进行比对着输入时,来回切换比较麻烦,就可以利用分屏 可以在一 ...

  5. lintcode: 最小调整代价

    题目 最小调整代价 给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少. 样例 对于数组,最小的调整 ...

  6. Ubuntu14.0使用gparted调整分区大小

    不知道为什么,我总会碰到一些疑难杂症,别人的分区都是在同一个目录下,直接通过,不断调整同一目录下相邻分区之间的空间来达到调整目标分区大小的目的 但我的不一样,我的主要分区在扩展分区下,极其魔性,图片里 ...

  7. 算法进阶面试题04——平衡二叉搜索树、AVL/红黑/SB树、删除和调整平衡的方法、输出大楼轮廓、累加和等于num的最长数组、滴滴Xor

    接着第三课的内容和讲了第四课的部分内容 1.介绍二叉搜索树 在二叉树上,何为一个节点的后继节点? 何为搜索二叉树? 如何实现搜索二叉树的查找?插入?删除? 二叉树的概念上衍生出的. 任何一个节点,左比 ...

  8. Linux下调整ext3分区大小【转】

    本文转载自:https://blog.csdn.net/cruise_h/article/details/22403529 本文讨论如何再不丢失数据的情况下调整已有ext3分区的大小,包括: 压缩已有 ...

  9. 剑指offer十三之调整数组顺序使奇数位于偶数前面

    一.题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路 此题可 ...

随机推荐

  1. 函数与函数式编程(生成器 && 列表解析 && map函数 && filter函数)-(四)

    在学习python的过程中,无意中看到了函数式编程.在了解的过程中,明白了函数与函数式的区别,函数式编程的几种方式. 函数定义:函数是逻辑结构化和过程化的一种编程方法. 过程定义:过程就是简单特殊没有 ...

  2. js setTimeout运行机制

    在开始之前先看个面试例子 为什么会是0 1 2 2,而不是 0 0 1 1 再来看个例子 输出结果是4个undefined,为何不是1,2,3,4? 这是为什么呢,这是因为setTimeout是异步的 ...

  3. 在Linux中使用Dbeaver等GTK3界面的软件出现频繁闪烁的问题解决

    问题复现 复现环境LinuxMint 19 Dbeaver: 7.3 输入法: ibus + ibus-table-wubi 如图,当光标移动到Sql Editor中会不停的闪-- 解决过程 先百度. ...

  4. Trie 练习记录

    蒟蒻以前写的逊爆讲解 Trie CF665E Beautiful Subarrays 代码 把之前每个前缀和放进 trie 树里,然后 trie 树上查询即可. CF37C Old Berland L ...

  5. Codeforces Edu Round 50 A-D

    A. Function Height 由于只能提升\(x\)为奇数的点,每个三角形的底一定为\(2\), 则要求我们求: \(2 * (h_1 + h_2 + - + h_n) / 2 = k\),使 ...

  6. libev的用法

    本例是以linux环境c++的用法,ide用的是vs2019 一.libev的安装 我们采用的是apt-get方法(偷懒^_^),你也可以采用源码方式安装 sudo apt-get install l ...

  7. STL——容器(Set & multiset)的删除 erase

    set.clear();             //清除所有元素 set.erase(pos);     //删除pos迭代器所指的元素,返回下一个元素的迭代器. set.erase(beg,end ...

  8. 二、Linux文件系统结构

    为了方便管理文件和目录,Linux 系统将它们组织成一个以根目录 / 开始的倒置的树状结构.Linux 中的目录,和 Windows 系统中的文件夹类似,不同之处在于,Linux 系统中的目录也被当做 ...

  9. [小专题]另一种字符串匹配的思路——Shift-And算法

    吐槽:前两天打组队赛遇到一个字符串的题考了这个(见:http://acm.hdu.edu.cn/showproblem.php?pid=5972 ) 当时写了个KMP瞎搞然后TLE了(害),赛后去查了 ...

  10. swift笔记简录

    一,变量和常量 /***************************基本数据类型*************************/ /****************************** ...