• 07月份相关代码


    ---------------------------------------------------------------------------------------

    1.每次导入使用连续的序列号 ;比如batch=1 bsd 1..100 ;NCD 1..65 ; 如果分组为 IBO0+NCD1+BSD0 分别是。。。。

    --TYPE  STR_SPLIT

    CREATE OR REPLACE TYPE STR_SPLIT    IS TABLE OF VARCHAR2 (4000);

    --- FUNCTION STR_SPLIT() ;

    CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
       /**********************************************************************
        * 通用方法:按列返回分割字符串后的内容
        * 入参:p_string 分割字符串
        *       p_delimiter 分割符
        * 返回:每个分割出来的字符串
        **********************************************************************/
        RETURN str_split
        PIPELINED
    AS
        v_length   NUMBER := LENGTH(p_string);
        v_start    NUMBER := 1;
        v_index    NUMBER;
    BEGIN
        WHILE(v_start <= v_length)
        LOOP
            v_index := INSTR(p_string, p_delimiter, v_start);
    
            IF v_index = 0
            THEN
                PIPE ROW(SUBSTR(p_string, v_start));
                v_start := v_length + 1;
            ELSE
                PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
                v_start := v_index + 1;
            END IF;
        END LOOP;
    
        RETURN;
    END splitstr;


    ---

     1 CREATE OR REPLACE PACKAGE TAX_CONTROL_SENDS IS
     2 
     3   -- Public type declarations  type <TypeName> is <Datatype>;
     4   TYPE IDX_TABL_GROUP IS TABLE OF VARCHAR2(4000) INDEX BY PLS_INTEGER;
     5   TYPE IDX_TABLE_HEAD IS TABLE OF INVOICEDATAMAIN%ROWTYPE INDEX BY PLS_INTEGER;
     6   TYPE IDX_TABLE_LINE IS TABLE OF INVOICEDATADETAIL%ROWTYPE INDEX BY PLS_INTEGER;
     7   TYPE ARR_LIST_BOOLEAN IS VARRAY(17) OF INTEGER;
     8 
     9   IDX_HEAD IDX_TABLE_HEAD;
    10   IDX_LINE IDX_TABLE_LINE;
    11   IDX_TAB  IDX_TABL_GROUP;
    12   LIST     ARR_LIST_BOOLEAN;
    13   V_SPLITSTR CONSTANT VARCHAR2(2) := '|';
    14   V_TYPE2ISTRUE   INT;
    15   V_TYPE3ISTRUE   INT;
    16   V_GN_COUNT      INT;
    17   V_DETAILCOUNT_1 INT;
    18   V_DETAILCOUNT_2 INT;
    19   V_DEALMONTH     VARCHAR2(100);
    20   V_PTCLIST       VARCHAR2(300);
    21   --分组id ;
    22   V_GROUPID INTEGER;
    23   --会员id ;
    24   V_MEMBERID INTEGER;
    25   --分组名 
    26   V_GROUPNAME TAX_CONTROL_SEND.GROUPNAME%TYPE;
    27   --编号;
    28   -- V_UNINO VARCHAR2(16);
    29   --产品分组;
    30   V_PRODUCTGROUPNAME VARCHAR2(1000);
    31   --产品CODE;
    32   V_PRODUCTCODE VARCHAR2(10);
    33   --是否汇总;
    34   V_ISSUMMARY VARCHAR2(100);
    35   -- 最大的;
    36   V_MAXROWNUM INTEGER := 0;
    37   ---v_goods
    38   V_GOODS TAX_CONTROL_SEND.GOODS%TYPE;
    39   ---
    40   V_MAXBATCHNO INT;
    41   V_ROWID      ROWID;
    42   --function insertHeadTab向头表中插入数据,返回值类型为 true/false;
    43   FUNCTION INSERTHEADTAB(IN_GROUPID   IN INTEGER,
    44                          IN_DEALMONTH IN VARCHAR2,
    45                          V_UNINO      IN VARCHAR2) RETURN BOOLEAN;
    46   --function insertLineTab()向行表中插入数据,返回值类型为 true/false;
    47   FUNCTION INSERTLINETAB(V_UNINO      IN VARCHAR2,
    48                          IN_MEMBERID  IN INTEGER,
    49                          IN_PCODE     IN VARCHAR2,
    50                          IN_DEALMONTH IN VARCHAR2) RETURN BOOLEAN;
    51 
    52   --function insertsummaryData() 汇总插入 ;
    53   FUNCTION INSERTSUMMARYDATA(V_UNINO      IN VARCHAR2,
    54                              IN_MEMBERID  IN INTEGER,
    55                              IN_PCODE     IN VARCHAR2,
    56                              IN_DEALMONTH IN VARCHAR2) RETURN BOOLEAN;
    57   --将头表和行表的信息落入本地invoicedataMain 和 invoicedatadetail 表中;
    58   FUNCTION INSERT_INVOICE_MAIN_DETAIL(IN_GROUPID IN INTEGER) RETURN BOOLEAN;
    59   --将head表的主键关联到 insert 到 send 表headLineTabID;
    60   FUNCTION UPDATETTSENDTAB(IN_GROUPID IN INTEGER, V_UNINO IN VARCHAR2)
    61     RETURN BOOLEAN;
    62   ---自定义的明细insert 到detail 表 ;
    63   FUNCTION CUSTOMGROUPNAME_DETAIL(V_UNINO       IN VARCHAR2,
    64                                   V_MEMBERID    IN INTEGER,
    65                                   V_PRODUCTCODE IN VARCHAR2,
    66                                   V_DEALMONTH   IN VARCHAR2) RETURN BOOLEAN;
    67   --executeProcedure 
    68 
    69   ---自定义的summary insert 到detail 表 ;
    70   FUNCTION CUSTOMGROUPNAME_SUMMARY_2(V_UNINO       IN VARCHAR2,
    71                                      V_MEMBERID    IN INTEGER,
    72                                      V_PRODUCTCODE IN VARCHAR2,
    73                                      V_DEALMONTH   IN VARCHAR2)
    74     RETURN BOOLEAN;
    75 
    76   FUNCTION CUSTOMGROUPNAME_SUMMARY_3(V_UNINO       IN VARCHAR2,
    77                                      V_MEMBERID    IN INTEGER,
    78                                      V_PRODUCTCODE IN VARCHAR2,
    79                                      V_DEALMONTH   IN VARCHAR2)
    80     RETURN BOOLEAN;
    81 
    82   PROCEDURE EXECUTEPROCEDURE;
    83 END TAX_CONTROL_SENDS;
       1 CREATE OR REPLACE PACKAGE BODY TAX_CONTROL_SENDS IS
       2   /**********************************************************************
       3   ***FunctionName: INSERTHEADTAB
       4   ***Used as:根据分组将发票维护的数据通过 insert into select 的形式insert到head表; 
       5   ***Date: 2017/0601
       6   ***Author: Mr.yang
       7   **********************************************************************/
       8   FUNCTION INSERTHEADTAB(IN_GROUPID   IN INTEGER,
       9                          IN_DEALMONTH VARCHAR2,
      10                          V_UNINO      IN VARCHAR2) RETURN BOOLEAN AS
      11   
      12     RESULTFLAG BOOLEAN := FALSE;
      13   BEGIN
      14     V_DEALMONTH := IN_DEALMONTH;
      15     V_GROUPID   := IN_GROUPID;
      16     --将查询结果放入到IDX_HEAD 当中;
      17     INSERT INTO INVOICEDATAMAIN
      18       SELECT V_UNINO,
      19              IM.MEMBERID,
      20              NULL,
      21              IM.CUSTOMERNAME,
      22              IM.RATEPAYERNUMBER,
      23              IM.CUSTOMERADDRESS || IM.PHONE,
      24              IM.CUSTOMERBANKNAME,
      25              TO_DATE(V_DEALMONTH, 'yyyy-mm'),
      26              NULL,
      27              TCGM.INVOICEKIND,
      28              NULL,
      29              NULL,
      30              NULL,
      31              NULL,
      32              NULL,
      33              NULL,
      34              'N',
      35              NULL,
      36              NULL,
      37              0,
      38              SYSTIMESTAMP
      39       --  BULK COLLECT INTO tax_control_sends.IDX_HEAD
      40         FROM INVOICE_INFO_MAINTAIN IM, TAX_CONTROLLED_GROUP_MAINTAIN TCGM
      41        WHERE TCGM.MEMBERID = IM.MEMBERID(+)
      42          AND TCGM.ID = V_GROUPID;
      43     --从IDX_HEAD中取数据批量insert到INVOICEDATAMAIN 表中;
      44     RESULTFLAG := TRUE;
      45     RETURN RESULTFLAG;
      46   EXCEPTION
      47     WHEN OTHERS THEN
      48       DBMS_OUTPUT.PUT_LINE('INSERT_HEAD_TAB触发异常:::' || SQLCODE || SQLERRM);
      49       RETURN RESULTFLAG;
      50   END INSERTHEADTAB;
      51   /**********************************************************************
      52   ***FunctionName: INSERTLINETAB
      53   ***Used as: 根据分组将明细数据通过 insert into select 的形式insert到line表; 
      54   ***Date: 2017/0601
      55   ***Author: Mr.yang
      56   **********************************************************************/
      57   FUNCTION INSERTLINETAB(V_UNINO      IN VARCHAR2,
      58                          IN_MEMBERID  IN INTEGER,
      59                          IN_PCODE     IN VARCHAR2,
      60                          IN_DEALMONTH IN VARCHAR2) RETURN BOOLEAN AS
      61     RESULTFLAG BOOLEAN := FALSE;
      62   
      63   BEGIN
      64     V_DEALMONTH   := IN_DEALMONTH;
      65     V_MEMBERID    := IN_MEMBERID;
      66     V_PRODUCTCODE := IN_PCODE;
      67   
      68     SELECT 编号,
      69            序号,
      70            数量,
      71            单价,
      72            金额,
      73            税率,
      74            税额,
      75            商品名称,
      76            商品税目,
      77            规格型号,
      78            计量单位,
      79            含税标志,
      80            原价,
      81            折扣率,
      82            折扣金额,
      83            折扣税额,
      84            备注,
      85            状态,
      86            CREATETIME,
      87            MODIFYTIME,
      88            编码版本号,
      89            税收分类编码,
      90            优惠政策,
      91            折扣行 BULK COLLECT
      92       INTO IDX_LINE
      93     
      94       FROM (SELECT V_UNINO AS 编号,
      95                    (ROWNUM + V_MAXROWNUM) AS 序号,
      96                    NULL AS 数量,
      97                    NULL AS 单价,
      98                    FBD.EXCLUDEBROKERAGE AS 金额,
      99                    6 AS 税率,
     100                    FBD.TAXPRICE AS 税额,
     101                    V_GOODS AS 商品名称,
     102                    '0101' AS 商品税目,
     103                    V_PRODUCTCODE AS 规格型号,
     104                    NULL AS 计量单位,
     105                    'N' AS 含税标志,
     106                    NULL AS 原价,
     107                    NULL AS 折扣率,
     108                    NULL AS 折扣金额,
     109                    NULL AS 折扣税额,
     110                    NULL AS 备注,
     111                    0 AS 状态,
     112                    SYSTIMESTAMP AS CREATETIME,
     113                    SYSTIMESTAMP AS MODIFYTIME,
     114                    '13.0' AS 编码版本号,
     115                    '30602' AS 税收分类编码,
     116                    0 AS 优惠政策,
     117                    ROWNUM AS 折扣行
     118             
     119               FROM (SELECT FBD.DEALNO,
     120                            FBD.TAXPRICE,
     121                            FBD.INCLUDEBROKERAGE,
     122                            FBD.EXCLUDEBROKERAGE
     123                       FROM FINANCE_BILL_DETAIL FBD
     124                      WHERE FBD.MEMBERID = V_MEMBERID
     125                        AND FBD.BILLDATE = V_DEALMONTH
     126                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     127                        AND FBD.GROUPNAME = V_GROUPNAME
     128                        AND FBD.BATCHNO = V_MAXBATCHNO
     129                     
     130                     ) FBD,
     131                    (SELECT B.DEALNO,
     132                            SUM(B.DISCOUNTCNY) AS DISCOUNTCNY,
     133                            SUM(B.DISCOUNTAMOUNTCNY) AS DISCOUNTAMOUNTCNY,
     134                            SUM(B.DISCOUNTTAXAFTERCNY) AS DISCOUNTTAXAFTERCNY
     135                       FROM (SELECT M.NO AS DEALNO,
     136                                    DECODE(M.BUYERID, V_MEMBERID, 1, 2) AS BSFLAG
     137                               FROM HIS_PRODUCT_DEAL_MAIN M
     138                              WHERE EXISTS
     139                              (SELECT 1
     140                                       FROM FINANCE_BILL_DETAIL FBD
     141                                      WHERE M.NO = FBD.DEALNO
     142                                        AND FBD.MEMBERID = V_MEMBERID
     143                                        AND FBD.BILLDATE = V_DEALMONTH
     144                                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     145                                        AND FBD.BATCHNO = V_MAXBATCHNO
     146                                        AND FBD.GROUPNAME = V_GROUPNAME
     147                                     
     148                                     )
     149                                AND M.STATE = 9
     150                             
     151                             ) MA,
     152                            BASE_DEAL_DISCOUNT B
     153                      WHERE MA.DEALNO = B.DEALNO(+)
     154                        AND MA.BSFLAG = B.BSFLAG(+)
     155                        AND B.STATUS = 0
     156                        AND B.ISWRITEOFF = 0
     157                      GROUP BY B.DEALNO) BDD
     158              WHERE FBD.DEALNO = BDD.DEALNO(+)
     159             
     160             UNION ALL
     161             
     162             SELECT MAX(V_UNINO) AS 编号,
     163                    MAX(ROWNUM) + 1 + V_MAXROWNUM AS 序号,
     164                    NULL AS 数量,
     165                    NULL AS 单价,
     166                    SUM(NVL(BDD.DISCOUNTCNY, 0)) * -1 AS 金额,
     167                    6 AS 税率,
     168                    ROUND(SUM(NVL(BDD.DISCOUNTCNY, 0)) * 0.06, 2) * -1 AS 税额,
     169                    V_GOODS 商品名称,
     170                    '0101' AS 商品税目,
     171                    V_PRODUCTCODE AS 规格型号,
     172                    NULL AS 计量单位,
     173                    'N' AS 含税标志,
     174                    NULL AS 原价,
     175                    NULL AS 折扣率,
     176                    NULL AS 折扣金额,
     177                    NULL AS 折扣税额,
     178                    NULL AS 备注,
     179                    0 状态,
     180                    SYSTIMESTAMP AS CREATETIME,
     181                    SYSTIMESTAMP AS MODIFYTIME,
     182                    '13.0' AS 编码版本号,
     183                    '30602' AS 税收分类编码,
     184                    0 AS 优惠政策,
     185                    V_DETAILCOUNT_2 AS 折扣行
     186             
     187               FROM (SELECT FBD.DEALNO,
     188                            FBD.TAXPRICE,
     189                            FBD.INCLUDEBROKERAGE,
     190                            FBD.EXCLUDEBROKERAGE
     191                       FROM FINANCE_BILL_DETAIL FBD
     192                      WHERE FBD.MEMBERID = V_MEMBERID
     193                        AND FBD.BILLDATE = V_DEALMONTH
     194                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     195                        AND FBD.GROUPNAME = V_GROUPNAME
     196                        AND FBD.BATCHNO = V_MAXBATCHNO) FBD,
     197                    (SELECT B.DEALNO,
     198                            SUM(B.DISCOUNTCNY) AS DISCOUNTCNY,
     199                            SUM(B.DISCOUNTAMOUNTCNY) AS DISCOUNTAMOUNTCNY,
     200                            SUM(B.DISCOUNTTAXAFTERCNY) AS DISCOUNTTAXAFTERCNY
     201                       FROM (SELECT M.NO AS DEALNO,
     202                                    DECODE(M.BUYERID, V_MEMBERID, 1, 2) AS BSFLAG
     203                               FROM HIS_PRODUCT_DEAL_MAIN M
     204                              WHERE EXISTS
     205                              (SELECT 1
     206                                       FROM FINANCE_BILL_DETAIL FBD
     207                                      WHERE M.NO = FBD.DEALNO
     208                                        AND FBD.MEMBERID = V_MEMBERID
     209                                        AND FBD.BILLDATE = V_DEALMONTH
     210                                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     211                                        AND FBD.BATCHNO = V_MAXBATCHNO
     212                                        AND FBD.GROUPNAME = V_GROUPNAME)
     213                                AND M.STATE = 9) MA,
     214                            BASE_DEAL_DISCOUNT B
     215                      WHERE MA.DEALNO = B.DEALNO(+)
     216                        AND MA.BSFLAG = B.BSFLAG(+)
     217                        AND B.STATUS = 0
     218                        AND B.ISWRITEOFF = 0
     219                      GROUP BY B.DEALNO) BDD
     220              WHERE FBD.DEALNO = BDD.DEALNO(+));
     221   
     222     V_MAXROWNUM := IDX_LINE(IDX_LINE.LAST).SERIAL;
     223   
     224     FORALL J IN IDX_LINE.FIRST .. IDX_LINE.LAST
     225       INSERT INTO INVOICEDATADETAIL
     226       VALUES
     227         (IDX_LINE(J).UNINO,
     228          IDX_LINE(J).SERIAL,
     229          IDX_LINE(J).QTY,
     230          IDX_LINE(J).PRICE,
     231          IDX_LINE(J).SHPAMT,
     232          IDX_LINE(J).TAXRATE,
     233          IDX_LINE(J).TAXATION,
     234          IDX_LINE(J).TRADENAME,
     235          IDX_LINE(J).TRADETAX,
     236          IDX_LINE(J).MODEL,
     237          IDX_LINE(J).UNIT,
     238          IDX_LINE(J).TAXPRICE,
     239          IDX_LINE(J).OLDPRICE,
     240          IDX_LINE(J).DISRATE,
     241          IDX_LINE(J).DISAMT,
     242          IDX_LINE(J).DISTAXAMT,
     243          IDX_LINE(J).REMARK,
     244          IDX_LINE(J).STATE,
     245          IDX_LINE(J).CREATETIME,
     246          IDX_LINE(J).MODIFYTIME,
     247          IDX_LINE(J).BMBBH,
     248          IDX_LINE(J).SSFLBM,
     249          IDX_LINE(J).YHZC,
     250          IDX_LINE(J).DISCOUNTLINE);
     251   
     252     RESULTFLAG := TRUE;
     253     RETURN RESULTFLAG;
     254   EXCEPTION
     255     WHEN OTHERS THEN
     256       DBMS_OUTPUT.PUT_LINE('INSERT_LINE_TAB 触发异常::::' || SQLCODE || '::' ||
     257                            SQLERRM || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
     258       RETURN RESULTFLAG;
     259   END INSERTLINETAB;
     260   /**********************************************************************
     261   ***FunctionName: CUSTOMGROUPNAMEDETAIL
     262   ***Used as:  
     263   ***Date: 2017/0601
     264   ***Author: Mr.yang
     265   **********************************************************************/
     266   FUNCTION CUSTOMGROUPNAME_DETAIL(V_UNINO       IN VARCHAR2,
     267                                   V_MEMBERID    IN INTEGER,
     268                                   V_PRODUCTCODE IN VARCHAR2,
     269                                   V_DEALMONTH   IN VARCHAR2) RETURN BOOLEAN AS
     270     RESULTFLAG BOOLEAN := FALSE;
     271   
     272   BEGIN
     273   
     274     SELECT 编号,
     275            序号,
     276            数量,
     277            单价,
     278            金额,
     279            税率,
     280            税额,
     281            商品名称,
     282            商品税目,
     283            规格型号,
     284            计量单位,
     285            含税标志,
     286            原价,
     287            折扣率,
     288            折扣金额,
     289            折扣税额,
     290            备注,
     291            状态,
     292            CREATETIME,
     293            MODIFYTIME,
     294            编码版本号,
     295            税收分类编码,
     296            优惠政策,
     297            折扣行
     298            
     299            BULK COLLECT
     300       INTO IDX_LINE
     301       FROM (SELECT V_UNINO AS 编号,
     302                    (ROWNUM + V_MAXROWNUM) AS 序号,
     303                    NULL AS 数量,
     304                    NULL AS 单价,
     305                    FBD.EXCLUDEBROKERAGE AS 金额,
     306                    6 AS 税率,
     307                    FBD.TAXPRICE AS 税额,
     308                    V_GOODS AS 商品名称,
     309                    '0101' AS 商品税目,
     310                    V_PRODUCTCODE AS 规格型号,
     311                    NULL AS 计量单位,
     312                    'N' AS 含税标志,
     313                    NULL AS 原价,
     314                    NULL AS 折扣率,
     315                    NULL AS 折扣金额,
     316                    NULL AS 折扣税额,
     317                    NULL AS 备注,
     318                    0 AS 状态,
     319                    SYSTIMESTAMP AS CREATETIME,
     320                    SYSTIMESTAMP AS MODIFYTIME,
     321                    '13.0' AS 编码版本号,
     322                    '30602' AS 税收分类编码,
     323                    0 AS 优惠政策,
     324                    ROWNUM AS 折扣行
     325             
     326               FROM (SELECT DISTINCT (FBD.DEALNO),
     327                                     FBD.TAXPRICE,
     328                                     FBD.INCLUDEBROKERAGE,
     329                                     FBD.EXCLUDEBROKERAGE
     330                       FROM FINANCE_BILL_DETAIL FBD
     331                      WHERE FBD.MEMBERID = V_MEMBERID
     332                        AND FBD.BILLDATE = V_DEALMONTH
     333                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     334                        AND FBD.BATCHNO = V_MAXBATCHNO) FBD,
     335                    (SELECT B.DEALNO,
     336                            SUM(B.DISCOUNTCNY) AS DISCOUNTCNY,
     337                            SUM(B.DISCOUNTAMOUNTCNY) AS DISCOUNTAMOUNTCNY,
     338                            SUM(B.DISCOUNTTAXAFTERCNY) AS DISCOUNTTAXAFTERCNY
     339                       FROM (SELECT M.NO AS DEALNO,
     340                                    DECODE(M.BUYERID, V_MEMBERID, 1, 2) AS BSFLAG
     341                               FROM HIS_PRODUCT_DEAL_MAIN M
     342                              WHERE EXISTS
     343                              (SELECT 1
     344                                       FROM FINANCE_BILL_DETAIL FBD
     345                                      WHERE M.NO = FBD.DEALNO
     346                                        AND FBD.MEMBERID = V_MEMBERID
     347                                        AND FBD.BILLDATE = V_DEALMONTH
     348                                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     349                                        AND FBD.BATCHNO = V_MAXBATCHNO)
     350                                AND M.STATE = 9) MA,
     351                            BASE_DEAL_DISCOUNT B
     352                      WHERE MA.DEALNO = B.DEALNO(+)
     353                        AND MA.BSFLAG = B.BSFLAG(+)
     354                        AND B.STATUS = 0
     355                        AND B.ISWRITEOFF = 0
     356                      GROUP BY B.DEALNO) BDD
     357              WHERE FBD.DEALNO = BDD.DEALNO(+)
     358             
     359             UNION ALL
     360             
     361             SELECT MAX(V_UNINO) AS 编号,
     362                    MAX(ROWNUM) + 1 + V_MAXROWNUM AS 序号,
     363                    NULL AS 数量,
     364                    NULL AS 单价,
     365                    SUM(NVL(BDD.DISCOUNTCNY, 0)) * -1 AS 金额,
     366                    6 AS 税率,
     367                    ROUND(SUM(NVL(BDD.DISCOUNTCNY, 0)) * 0.06, 2) * -1 AS 税额,
     368                    V_GOODS 商品名称,
     369                    '0101' AS 商品税目,
     370                    V_PRODUCTCODE AS 规格型号,
     371                    NULL AS 计量单位,
     372                    'N' AS 含税标志,
     373                    NULL AS 原价,
     374                    NULL AS 折扣率,
     375                    NULL AS 折扣金额,
     376                    NULL AS 折扣税额,
     377                    NULL AS 备注,
     378                    0 状态,
     379                    SYSTIMESTAMP AS CREATETIME,
     380                    SYSTIMESTAMP AS MODIFYTIME,
     381                    '13.0' AS 编码版本号,
     382                    '30602' AS 税收分类编码,
     383                    0 AS 优惠政策,
     384                    V_DETAILCOUNT_1 AS 折扣行
     385             
     386               FROM (SELECT DISTINCT (FBD.DEALNO),
     387                                     FBD.TAXPRICE,
     388                                     FBD.INCLUDEBROKERAGE,
     389                                     FBD.EXCLUDEBROKERAGE
     390                       FROM FINANCE_BILL_DETAIL FBD
     391                      WHERE FBD.MEMBERID = V_MEMBERID
     392                        AND FBD.BILLDATE = V_DEALMONTH
     393                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     394                        AND FBD.BATCHNO = V_MAXBATCHNO) FBD,
     395                    (SELECT B.DEALNO,
     396                            SUM(B.DISCOUNTCNY) AS DISCOUNTCNY,
     397                            SUM(B.DISCOUNTAMOUNTCNY) AS DISCOUNTAMOUNTCNY,
     398                            SUM(B.DISCOUNTTAXAFTERCNY) AS DISCOUNTTAXAFTERCNY
     399                       FROM (SELECT M.NO AS DEALNO,
     400                                    DECODE(M.BUYERID, V_MEMBERID, 1, 2) AS BSFLAG
     401                               FROM HIS_PRODUCT_DEAL_MAIN M
     402                              WHERE EXISTS
     403                              (SELECT 1
     404                                       FROM FINANCE_BILL_DETAIL FBD
     405                                      WHERE M.NO = FBD.DEALNO
     406                                        AND FBD.MEMBERID = V_MEMBERID
     407                                        AND FBD.BILLDATE = V_DEALMONTH
     408                                        AND FBD.PRODUCTCODE = V_PRODUCTCODE
     409                                        AND FBD.BATCHNO = V_MAXBATCHNO)
     410                                AND M.STATE = 9) MA,
     411                            BASE_DEAL_DISCOUNT B
     412                      WHERE MA.DEALNO = B.DEALNO(+)
     413                        AND MA.BSFLAG = B.BSFLAG(+)
     414                        AND B.STATUS = 0
     415                        AND B.ISWRITEOFF = 0
     416                      GROUP BY B.DEALNO) BDD
     417              WHERE FBD.DEALNO = BDD.DEALNO(+));
     418   
     419     V_MAXROWNUM := IDX_LINE(IDX_LINE.LAST).SERIAL;
     420     DBMS_OUTPUT.PUT_LINE('V_MAXROWNUM=' || V_MAXROWNUM);
     421     FORALL J IN IDX_LINE.FIRST .. IDX_LINE.LAST
     422       INSERT INTO INVOICEDATADETAIL
     423       VALUES
     424         (IDX_LINE(J).UNINO,
     425          IDX_LINE(J).SERIAL,
     426          IDX_LINE(J).QTY,
     427          IDX_LINE(J).PRICE,
     428          IDX_LINE(J).SHPAMT,
     429          IDX_LINE(J).TAXRATE,
     430          IDX_LINE(J).TAXATION,
     431          IDX_LINE(J).TRADENAME,
     432          IDX_LINE(J).TRADETAX,
     433          IDX_LINE(J).MODEL,
     434          IDX_LINE(J).UNIT,
     435          IDX_LINE(J).TAXPRICE,
     436          IDX_LINE(J).OLDPRICE,
     437          IDX_LINE(J).DISRATE,
     438          IDX_LINE(J).DISAMT,
     439          IDX_LINE(J).DISTAXAMT,
     440          IDX_LINE(J).REMARK,
     441          IDX_LINE(J).STATE,
     442          IDX_LINE(J).CREATETIME,
     443          IDX_LINE(J).MODIFYTIME,
     444          IDX_LINE(J).BMBBH,
     445          IDX_LINE(J).SSFLBM,
     446          IDX_LINE(J).YHZC,
     447          IDX_LINE(J).DISCOUNTLINE);
     448   
     449     RESULTFLAG := TRUE;
     450     RETURN RESULTFLAG;
     451   
     452   EXCEPTION
     453     WHEN OTHERS THEN
     454       DBMS_OUTPUT.PUT_LINE('CUSTOMGROUPNAMEDETAIL 触发异常::::' || SQLCODE || '::' ||
     455                            SQLERRM || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
     456       RETURN RESULTFLAG;
     457     
     458   END CUSTOMGROUPNAME_DETAIL;
     459 
     460   /**********************************************************************
     461   ***FunctionName: INSERTSUMMARYDATA
     462   ***Used as: 根据分组将汇总数据通过 insert into select 的形式insert到line表; 
     463   ***Date: 2017/0601
     464   ***Author: Mr.yang
     465   **********************************************************************/
     466   FUNCTION INSERTSUMMARYDATA(V_UNINO      IN VARCHAR2,
     467                              IN_MEMBERID  IN INTEGER,
     468                              IN_PCODE     IN VARCHAR2,
     469                              IN_DEALMONTH IN VARCHAR2) RETURN BOOLEAN AS
     470     RESULTFLAG BOOLEAN := FALSE;
     471   
     472   BEGIN
     473     V_DEALMONTH   := IN_DEALMONTH;
     474     V_PRODUCTCODE := IN_PCODE;
     475     V_MEMBERID    := IN_MEMBERID;
     476   
     477     SELECT 编号,
     478            序号,
     479            数量,
     480            单价,
     481            金额,
     482            税率,
     483            税额,
     484            商品名称,
     485            商品税目,
     486            规格型号,
     487            计量单位,
     488            含税标志,
     489            原价,
     490            折扣率,
     491            折扣金额,
     492            折扣税额,
     493            备注,
     494            状态,
     495            CREATETIME,
     496            MODIFYTIME,
     497            编码版本号,
     498            税收分类编码,
     499            优惠政策,
     500            折扣行
     501            
     502            BULK COLLECT
     503       INTO IDX_LINE
     504     
     505       FROM (SELECT TO_CHAR(V_UNINO) AS 编号,
     506                    (ROWNUM + V_MAXROWNUM) AS 序号,
     507                    NULL AS 数量,
     508                    NULL AS 单价,
     509                    S.EXCLUDETAXBROKERAGE AS 金额,
     510                    6 AS 税率,
     511                    S.TAXPRICE AS 税额,
     512                    V_GOODS AS 商品名称,
     513                    '0101' AS 商品税目,
     514                    V_PRODUCTCODE AS 规格型号,
     515                    NULL AS 计量单位,
     516                    'N' AS 含税标志,
     517                    NULL AS 原价,
     518                    NULL AS 折扣率,
     519                    NULL AS 折扣金额,
     520                    NULL AS 折扣税额,
     521                    NULL AS 备注,
     522                    0 状态,
     523                    SYSTIMESTAMP AS CREATETIME,
     524                    SYSTIMESTAMP AS MODIFYTIME,
     525                    '13.0' AS 编码版本号,
     526                    '30602' AS 税收分类编码,
     527                    0 AS 优惠政策,
     528                    ROWNUM AS 折扣行
     529               FROM FINANCE_BILL_SUMMARY S
     530              WHERE S.BILLDATE = V_DEALMONTH
     531                AND S.PRODUCT = V_PRODUCTCODE
     532                AND S.MEMBERID = V_MEMBERID
     533                AND S.GROUPNAME = V_GROUPNAME
     534                AND S.BATCHNO = V_MAXBATCHNO
     535             
     536             UNION ALL
     537             
     538             SELECT TO_CHAR(V_UNINO) AS 编号,
     539                    (ROWNUM + 1 + V_MAXROWNUM) AS 序号,
     540                    NULL AS 数量,
     541                    NULL AS 单价,
     542                    S.DISCOUNT * -1 AS 金额,
     543                    6 AS 税率,
     544                    S.DISCOUNTTAXPRICE * -1 AS 税额,
     545                    V_GOODS AS 商品名称,
     546                    '0101' AS 商品税目,
     547                    V_PRODUCTCODE AS 规格型号,
     548                    NULL AS 计量单位,
     549                    'N' AS 含税标志,
     550                    NULL AS 原价,
     551                    NULL AS 折扣率,
     552                    NULL AS 折扣金额,
     553                    NULL AS 折扣税额,
     554                    NULL AS 备注,
     555                    0 状态,
     556                    SYSTIMESTAMP AS CREATETIME,
     557                    SYSTIMESTAMP AS MODIFYTIME,
     558                    '13.0' AS 编码版本号,
     559                    '30602' AS 税收分类编码,
     560                    0 AS 优惠政策,
     561                    V_GN_COUNT AS 折扣行
     562               FROM FINANCE_BILL_SUMMARY S
     563              WHERE S.BILLDATE = V_DEALMONTH
     564                AND S.PRODUCT = V_PRODUCTCODE
     565                AND S.MEMBERID = V_MEMBERID
     566                AND S.GROUPNAME = V_GROUPNAME
     567                AND S.BATCHNO = V_MAXBATCHNO);
     568   
     569     V_MAXROWNUM := IDX_LINE(IDX_LINE.LAST).SERIAL;
     570     DBMS_OUTPUT.PUT_LINE('V_MAXROWNUM=' || V_MAXROWNUM);
     571     FORALL J IN IDX_LINE.FIRST .. IDX_LINE.LAST
     572       INSERT INTO INVOICEDATADETAIL
     573       VALUES
     574         (IDX_LINE(J).UNINO,
     575          IDX_LINE(J).SERIAL,
     576          IDX_LINE(J).QTY,
     577          IDX_LINE(J).PRICE,
     578          IDX_LINE(J).SHPAMT,
     579          IDX_LINE(J).TAXRATE,
     580          IDX_LINE(J).TAXATION,
     581          IDX_LINE(J).TRADENAME,
     582          IDX_LINE(J).TRADETAX,
     583          IDX_LINE(J).MODEL,
     584          IDX_LINE(J).UNIT,
     585          IDX_LINE(J).TAXPRICE,
     586          IDX_LINE(J).OLDPRICE,
     587          IDX_LINE(J).DISRATE,
     588          IDX_LINE(J).DISAMT,
     589          IDX_LINE(J).DISTAXAMT,
     590          IDX_LINE(J).REMARK,
     591          IDX_LINE(J).STATE,
     592          IDX_LINE(J).CREATETIME,
     593          IDX_LINE(J).MODIFYTIME,
     594          IDX_LINE(J).BMBBH,
     595          IDX_LINE(J).SSFLBM,
     596          IDX_LINE(J).YHZC,
     597          IDX_LINE(J).DISCOUNTLINE);
     598   
     599     RESULTFLAG := TRUE;
     600     RETURN RESULTFLAG;
     601   EXCEPTION
     602     WHEN OTHERS THEN
     603       DBMS_OUTPUT.PUT_LINE('INSERT_SUMMARY_DATA触发异常:::' || SQLCODE ||
     604                            SQLERRM || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
     605       RETURN RESULTFLAG;
     606   END INSERTSUMMARYDATA;
     607 
     608   FUNCTION CUSTOMGROUPNAME_SUMMARY_2(V_UNINO       IN VARCHAR2,
     609                                      V_MEMBERID    IN INTEGER,
     610                                      V_PRODUCTCODE IN VARCHAR2,
     611                                      V_DEALMONTH   IN VARCHAR2)
     612     RETURN BOOLEAN AS
     613     RESULTFLAG BOOLEAN := FALSE;
     614   BEGIN
     615     SELECT 编号,
     616            序号,
     617            数量,
     618            单价,
     619            金额,
     620            税率,
     621            税额,
     622            商品名称,
     623            商品税目,
     624            规格型号,
     625            计量单位,
     626            含税标志,
     627            原价,
     628            折扣率,
     629            折扣金额,
     630            折扣税额,
     631            备注,
     632            状态,
     633            CREATETIME,
     634            MODIFYTIME,
     635            编码版本号,
     636            税收分类编码,
     637            优惠政策,
     638            折扣行 BULK COLLECT
     639       INTO IDX_LINE
     640     
     641       FROM (SELECT TO_CHAR(V_UNINO) AS 编号,
     642                    (ROWNUM + V_MAXROWNUM) AS 序号,
     643                    NULL AS 数量,
     644                    NULL AS 单价,
     645                    S.EXCLUDETAXBROKERAGE AS 金额,
     646                    6 AS 税率,
     647                    S.TAXPRICE AS 税额,
     648                    V_GOODS AS 商品名称,
     649                    '0101' AS 商品税目,
     650                    V_PRODUCTCODE AS 规格型号,
     651                    NULL AS 计量单位,
     652                    'N' AS 含税标志,
     653                    NULL AS 原价,
     654                    NULL AS 折扣率,
     655                    NULL AS 折扣金额,
     656                    NULL AS 折扣税额,
     657                    NULL AS 备注,
     658                    0 状态,
     659                    SYSTIMESTAMP AS CREATETIME,
     660                    SYSTIMESTAMP AS MODIFYTIME,
     661                    '13.0' AS 编码版本号,
     662                    '30602' AS 税收分类编码,
     663                    0 AS 优惠政策,
     664                    ROWNUM AS 折扣行
     665               FROM FINANCE_BILL_SUMMARY S
     666              WHERE S.BILLDATE = V_DEALMONTH
     667                AND S.PRODUCT = V_PRODUCTCODE
     668                AND S.MEMBERID = V_MEMBERID
     669                AND S.BATCHNO = V_MAXBATCHNO
     670                AND S.TYPE = 2
     671             
     672             UNION ALL
     673             
     674             SELECT TO_CHAR(V_UNINO) AS 编号,
     675                    MAX(ROWNUM) + 1 + V_MAXROWNUM AS 序号,
     676                    NULL AS 数量,
     677                    NULL AS 单价,
     678                    SUM(S.DISCOUNT) * -1 AS 金额,
     679                    6 AS 税率,
     680                    SUM(S.DISCOUNTTAXPRICE) * -1 AS 税额,
     681                    V_GOODS AS 商品名称,
     682                    '0101' AS 商品税目,
     683                    V_PRODUCTCODE AS 规格型号,
     684                    NULL AS 计量单位,
     685                    'N' AS 含税标志,
     686                    NULL AS 原价,
     687                    NULL AS 折扣率,
     688                    NULL AS 折扣金额,
     689                    NULL AS 折扣税额,
     690                    NULL AS 备注,
     691                    0 状态,
     692                    SYSTIMESTAMP AS CREATETIME,
     693                    SYSTIMESTAMP AS MODIFYTIME,
     694                    '13.0' AS 编码版本号,
     695                    '30602' AS 税收分类编码,
     696                    0 AS 优惠政策,
     697                    V_TYPE2ISTRUE AS 折扣行
     698               FROM FINANCE_BILL_SUMMARY S
     699              WHERE S.BILLDATE = V_DEALMONTH
     700                AND S.PRODUCT = V_PRODUCTCODE
     701                AND S.MEMBERID = V_MEMBERID
     702                AND S.BATCHNO = V_MAXBATCHNO
     703                AND S.TYPE = 2);
     704   
     705     V_MAXROWNUM := IDX_LINE(IDX_LINE.LAST).SERIAL;
     706     DBMS_OUTPUT.PUT_LINE('V_MAXROWNUM=' || V_MAXROWNUM);
     707     FORALL J IN IDX_LINE.FIRST .. IDX_LINE.LAST
     708       INSERT INTO INVOICEDATADETAIL
     709       VALUES
     710         (IDX_LINE(J).UNINO,
     711          IDX_LINE(J).SERIAL,
     712          IDX_LINE(J).QTY,
     713          IDX_LINE(J).PRICE,
     714          IDX_LINE(J).SHPAMT,
     715          IDX_LINE(J).TAXRATE,
     716          IDX_LINE(J).TAXATION,
     717          IDX_LINE(J).TRADENAME,
     718          IDX_LINE(J).TRADETAX,
     719          IDX_LINE(J).MODEL,
     720          IDX_LINE(J).UNIT,
     721          IDX_LINE(J).TAXPRICE,
     722          IDX_LINE(J).OLDPRICE,
     723          IDX_LINE(J).DISRATE,
     724          IDX_LINE(J).DISAMT,
     725          IDX_LINE(J).DISTAXAMT,
     726          IDX_LINE(J).REMARK,
     727          IDX_LINE(J).STATE,
     728          IDX_LINE(J).CREATETIME,
     729          IDX_LINE(J).MODIFYTIME,
     730          IDX_LINE(J).BMBBH,
     731          IDX_LINE(J).SSFLBM,
     732          IDX_LINE(J).YHZC,
     733          IDX_LINE(J).DISCOUNTLINE);
     734   
     735     RESULTFLAG := TRUE;
     736     RETURN RESULTFLAG;
     737   EXCEPTION
     738     WHEN OTHERS THEN
     739       RETURN RESULTFLAG;
     740   END CUSTOMGROUPNAME_SUMMARY_2;
     741 
     742   /**********************************************************************
     743   ***FunctionName: CUSTOMGROUPNAME_SUMMARY
     744   ***Used as:自定义分组 将汇总数据insert 到 detail表中 ;
     745   ***Date: 2017/0601
     746   ***Author: Mr.yang
     747   **********************************************************************/
     748 
     749   FUNCTION CUSTOMGROUPNAME_SUMMARY_3(V_UNINO       IN VARCHAR2,
     750                                      V_MEMBERID    IN INTEGER,
     751                                      V_PRODUCTCODE IN VARCHAR2,
     752                                      V_DEALMONTH   IN VARCHAR2)
     753     RETURN BOOLEAN AS
     754   
     755     RESULTFLAG BOOLEAN := FALSE;
     756   BEGIN
     757   
     758     SELECT 编号,
     759            序号,
     760            数量,
     761            单价,
     762            金额,
     763            税率,
     764            税额,
     765            商品名称,
     766            商品税目,
     767            规格型号,
     768            计量单位,
     769            含税标志,
     770            原价,
     771            折扣率,
     772            折扣金额,
     773            折扣税额,
     774            备注,
     775            状态,
     776            CREATETIME,
     777            MODIFYTIME,
     778            编码版本号,
     779            税收分类编码,
     780            优惠政策,
     781            折扣行 BULK COLLECT
     782       INTO IDX_LINE
     783     
     784       FROM (SELECT TO_CHAR(V_UNINO) AS 编号,
     785                    MAX(ROWNUM) + V_MAXROWNUM AS 序号,
     786                    NULL AS 数量,
     787                    NULL AS 单价,
     788                    SUM(S.EXCLUDETAXBROKERAGE) AS 金额,
     789                    6 AS 税率,
     790                    SUM(S.TAXPRICE) AS 税额,
     791                    V_GOODS AS 商品名称,
     792                    '0101' AS 商品税目,
     793                    V_PRODUCTCODE AS 规格型号,
     794                    NULL AS 计量单位,
     795                    'N' AS 含税标志,
     796                    NULL AS 原价,
     797                    NULL AS 折扣率,
     798                    NULL AS 折扣金额,
     799                    NULL AS 折扣税额,
     800                    NULL AS 备注,
     801                    0 状态,
     802                    SYSTIMESTAMP AS CREATETIME,
     803                    SYSTIMESTAMP AS MODIFYTIME,
     804                    '13.0' AS 编码版本号,
     805                    '30602' AS 税收分类编码,
     806                    0 AS 优惠政策,
     807                    ROWNUM AS 折扣行
     808               FROM FINANCE_BILL_SUMMARY S
     809              WHERE S.BILLDATE = V_DEALMONTH
     810                AND S.PRODUCT = V_PRODUCTCODE
     811                AND S.MEMBERID = V_MEMBERID
     812                AND S.TYPE = 3
     813                AND S.BATCHNO = V_MAXBATCHNO
     814             
     815             UNION ALL
     816             
     817             SELECT TO_CHAR(V_UNINO) AS 编号,
     818                    MAX(ROWNUM) + 1 + V_MAXROWNUM AS 序号,
     819                    NULL AS 数量,
     820                    NULL AS 单价,
     821                    SUM(S.DISCOUNT) * -1 AS 金额,
     822                    6 AS 税率,
     823                    SUM(S.DISCOUNTTAXPRICE) * -1 AS 税额,
     824                    V_GOODS AS 商品名称,
     825                    '0101' AS 商品税目,
     826                    V_PRODUCTCODE AS 规格型号,
     827                    NULL AS 计量单位,
     828                    'N' AS 含税标志,
     829                    NULL AS 原价,
     830                    NULL AS 折扣率,
     831                    NULL AS 折扣金额,
     832                    NULL AS 折扣税额,
     833                    NULL AS 备注,
     834                    0 状态,
     835                    SYSTIMESTAMP AS CREATETIME,
     836                    SYSTIMESTAMP AS MODIFYTIME,
     837                    '13.0' AS 编码版本号,
     838                    '30602' AS 税收分类编码,
     839                    0 AS 优惠政策,
     840                    V_TYPE3ISTRUE AS 折扣行
     841               FROM FINANCE_BILL_SUMMARY S
     842              WHERE S.BILLDATE = V_DEALMONTH
     843                AND S.PRODUCT = V_PRODUCTCODE
     844                AND S.MEMBERID = V_MEMBERID
     845                AND S.TYPE = 3
     846                AND S.BATCHNO = V_MAXBATCHNO);
     847   
     848     V_MAXROWNUM := IDX_LINE(IDX_LINE.LAST).SERIAL;
     849     DBMS_OUTPUT.PUT_LINE('V_MAXROWNUM=' || V_MAXROWNUM);
     850     FORALL J IN IDX_LINE.FIRST .. IDX_LINE.LAST
     851       INSERT INTO INVOICEDATADETAIL
     852       VALUES
     853         (IDX_LINE(J).UNINO,
     854          IDX_LINE(J).SERIAL,
     855          IDX_LINE(J).QTY,
     856          IDX_LINE(J).PRICE,
     857          IDX_LINE(J).SHPAMT,
     858          IDX_LINE(J).TAXRATE,
     859          IDX_LINE(J).TAXATION,
     860          IDX_LINE(J).TRADENAME,
     861          IDX_LINE(J).TRADETAX,
     862          IDX_LINE(J).MODEL,
     863          IDX_LINE(J).UNIT,
     864          IDX_LINE(J).TAXPRICE,
     865          IDX_LINE(J).OLDPRICE,
     866          IDX_LINE(J).DISRATE,
     867          IDX_LINE(J).DISAMT,
     868          IDX_LINE(J).DISTAXAMT,
     869          IDX_LINE(J).REMARK,
     870          IDX_LINE(J).STATE,
     871          IDX_LINE(J).CREATETIME,
     872          IDX_LINE(J).MODIFYTIME,
     873          IDX_LINE(J).BMBBH,
     874          IDX_LINE(J).SSFLBM,
     875          IDX_LINE(J).YHZC,
     876          IDX_LINE(J).DISCOUNTLINE);
     877   
     878     RESULTFLAG := TRUE;
     879     RETURN RESULTFLAG;
     880   EXCEPTION
     881     WHEN OTHERS THEN
     882       DBMS_OUTPUT.PUT_LINE(SQLCODE || SQLERRM);
     883     
     884   END CUSTOMGROUPNAME_SUMMARY_3;
     885 
     886   /**********************************************************************
     887   ***FunctionName: INSERT_INVOICE_MAIN_DETAIL
     888   ***Used as: 根据分组向 head 和 line 表中insert 数据;
     889   ***Date: 2017/0601
     890   ***Author: Mr.yang
     891   **********************************************************************/
     892   FUNCTION INSERT_INVOICE_MAIN_DETAIL(IN_GROUPID IN INTEGER) RETURN BOOLEAN AS
     893     RESULTFLAG    BOOLEAN := FALSE;
     894     V_UNINO       VARCHAR2(16);
     895     V_CUSTOMVALUE INT := 0;
     896   
     897     EXP_DETAIL EXCEPTION;
     898     EXP_SUMMARY EXCEPTION;
     899     CUSTOMGROUPEXP_DETAIL EXCEPTION;
     900     CUSTOMGROUPEXP_SUMMARY_2 EXCEPTION;
     901     CUSTOMGROUPEXP_SUMMARY_3 EXCEPTION;
     902     EXP_HEAD EXCEPTION;
     903   
     904   BEGIN
     905     V_TYPE2ISTRUE   := 0;
     906     V_TYPE3ISTRUE   := 0;
     907     V_DETAILCOUNT_1 := 0;
     908     V_DETAILCOUNT_2 := 0;
     909     V_MAXBATCHNO    := 0;
     910     V_MAXROWNUM     := 0;
     911     V_GROUPID       := IN_GROUPID;
     912     V_GN_COUNT      := 0;
     913     LIST            := ARR_LIST_BOOLEAN(NULL);
     914     --v_unino 作为INVOICEDATAMAIN 的主键id; 
     915     SELECT NVL(MAX(ROWNUM) + 1, 1) INTO V_UNINO FROM INVOICEDATAMAIN IDM;
     916     --根据V_GROUPID从税控分组维护表中获取产品分组信息和会员机构的ID ;   
     917     IF V_PRODUCTGROUPNAME IS NULL THEN
     918       SELECT TC.PRODUCTGROUP, TC.MEMBERID, TS.BILLDATE
     919         INTO V_PRODUCTGROUPNAME, V_MEMBERID, V_DEALMONTH
     920         FROM TAX_CONTROLLED_GROUP_MAINTAIN TC, TAX_CONTROL_SEND TS
     921        WHERE TC.ID = TS.GROUPID(+)
     922          AND TS.LOCALINSERTFLAG IS NULL
     923          AND TS.SENDSTATE = 0
     924          AND TC.ID = V_GROUPID
     925          AND TS.ROWID = V_ROWID;
     926     
     927     ELSE
     928     
     929       SELECT TC.MEMBERID, TS.BILLDATE
     930         INTO V_MEMBERID, V_DEALMONTH
     931         FROM TAX_CONTROLLED_GROUP_MAINTAIN TC, TAX_CONTROL_SEND TS
     932        WHERE TC.ID = TS.GROUPID(+)
     933          AND TS.LOCALINSERTFLAG IS NULL
     934          AND TS.SENDSTATE = 0
     935          AND TC.ID = V_GROUPID
     936          AND TS.ROWID = V_ROWID;
     937     
     938     END IF;
     939     --使用Function SPLITSTR  对产品分组进行拆分后放入idx_tab中;
     940     SELECT COLUMN_VALUE BULK COLLECT
     941       INTO IDX_TAB
     942       FROM TABLE(SPLITSTR(V_PRODUCTGROUPNAME, V_SPLITSTR));
     943   
     944     --向头表中insert数据 ; 
     945     IF INSERTHEADTAB(V_GROUPID, V_DEALMONTH, V_UNINO) THEN
     946       DBMS_OUTPUT.PUT_LINE('INSERTHEADTAB insert 成功 !');
     947     ELSE
     948       DBMS_OUTPUT.PUT_LINE('INSERTHEADTAB insert 失败 !');
     949       RAISE EXP_HEAD;
     950     END IF;
     951   
     952     --插入头表成功后再获取最大batchNo号;(因为头表insert失败整个方法失败,不需要在它之前进行查询!) 
     953     SELECT MAX(FBD.BATCHNO)
     954       INTO V_MAXBATCHNO
     955       FROM FINANCE_BILL_DETAIL FBD
     956      WHERE FBD.MEMBERID = V_MEMBERID
     957        AND FBD.BILLDATE = V_DEALMONTH;
     958   
     959     --对   tax_control_sends.IDX_TAB 进行循环  
     960     FOR I IN IDX_TAB.FIRST .. IDX_TAB.LAST LOOP
     961       LIST.EXTEND(IDX_TAB.LAST);
     962       --截取字符串 ;
     963       V_PRODUCTCODE := UPPER(SUBSTR(IDX_TAB(I), 0, LENGTH(IDX_TAB(I)) - 1));
     964       V_ISSUMMARY   := SUBSTR(IDX_TAB(I), -1, 1);
     965     
     966       --假如给据 月份+产品+机构id 没有查询到任何数据直接跳出本次循环;
     967       IF V_MAXBATCHNO IS NULL THEN
     968         RETURN RESULTFLAG;
     969       END IF;
     970     
     971       --判断是税控分组名还是财务账单分组名 ;
     972       SELECT COUNT(1)
     973         INTO V_CUSTOMVALUE
     974         FROM FINANCE_BILL_DETAIL FBD
     975        WHERE FBD.MEMBERID = V_MEMBERID
     976          AND FBD.BILLDATE = V_DEALMONTH
     977             -- AND FBD.PRODUCTCODE = V_PRODUCTCODE
     978          AND FBD.GROUPNAME = V_GROUPNAME;
     979     
     980       --V_ISSUMMARY=0 代表汇总 , 
     981       IF V_ISSUMMARY = 0 THEN
     982         --说明是税控维护的分组
     983         IF V_CUSTOMVALUE = 0 THEN
     984         
     985           ---查询判断TYPE=2是否存在如果不存在取type=3 ;
     986           SELECT COUNT(1)
     987             INTO V_TYPE2ISTRUE
     988             FROM FINANCE_BILL_SUMMARY FBD
     989            WHERE FBD.MEMBERID = V_MEMBERID
     990              AND FBD.BILLDATE = V_DEALMONTH
     991              AND FBD.PRODUCT = V_PRODUCTCODE
     992              AND FBD.BATCHNO = V_MAXBATCHNO
     993                 --  AND FBD.GROUPNAME = V_GROUPNAME
     994              AND FBD.TYPE = 2;
     995           IF V_TYPE2ISTRUE <> 0 THEN
     996             IF CUSTOMGROUPNAME_SUMMARY_2(V_UNINO,
     997                                          V_MEMBERID,
     998                                          V_PRODUCTCODE,
     999                                          V_DEALMONTH) THEN
    1000               LIST(I) := 1;
    1001               DBMS_OUTPUT.PUT_LINE('CUSTOMGROUPNAME_SUMMARY_2 insert 成功 !');
    1002             ELSE
    1003               --出发 CUSTOMGROUPNAME_SUMMARY_2 异常 ;
    1004               RAISE CUSTOMGROUPEXP_SUMMARY_2;
    1005             
    1006             END IF;
    1007           
    1008           ELSE
    1009             SELECT COUNT(1)
    1010               INTO V_TYPE3ISTRUE
    1011               FROM FINANCE_BILL_SUMMARY FBD
    1012              WHERE FBD.MEMBERID = V_MEMBERID
    1013                AND FBD.BILLDATE = V_DEALMONTH
    1014                AND FBD.PRODUCT = V_PRODUCTCODE
    1015                AND FBD.BATCHNO = V_MAXBATCHNO
    1016                   --  AND FBD.GROUPNAME = V_GROUPNAME
    1017                AND FBD.TYPE = 3;
    1018             IF V_TYPE3ISTRUE = 0 THEN
    1019               LIST(I) := 0;
    1020               CONTINUE;
    1021             ELSE
    1022               IF CUSTOMGROUPNAME_SUMMARY_3(V_UNINO,
    1023                                            V_MEMBERID,
    1024                                            V_PRODUCTCODE,
    1025                                            V_DEALMONTH) THEN
    1026                 LIST(I) := 1;
    1027                 DBMS_OUTPUT.PUT_LINE('想detail 表中插入自定义的汇总数据,insert 成功!');
    1028               ELSE
    1029                 RAISE CUSTOMGROUPEXP_SUMMARY_3;
    1030               
    1031               END IF;
    1032             END IF;
    1033           END IF;
    1034         
    1035         ELSIF V_CUSTOMVALUE <> 0 THEN
    1036         
    1037           SELECT COUNT(1)
    1038             INTO V_GN_COUNT
    1039             FROM FINANCE_BILL_SUMMARY FBD
    1040            WHERE FBD.MEMBERID = V_MEMBERID
    1041              AND FBD.BILLDATE = V_DEALMONTH
    1042              AND FBD.PRODUCT = V_PRODUCTCODE
    1043              AND FBD.BATCHNO = V_MAXBATCHNO
    1044              AND FBD.GROUPNAME = V_GROUPNAME
    1045              AND FBD.BATCHNO = V_MAXBATCHNO;
    1046           IF V_GN_COUNT = 0 THEN
    1047             LIST(I) := 0;
    1048             CONTINUE;
    1049           ELSE
    1050             --向行表中insert数据;
    1051             IF INSERTSUMMARYDATA(V_UNINO,
    1052                                  V_MEMBERID,
    1053                                  V_PRODUCTCODE,
    1054                                  V_DEALMONTH) THEN
    1055               LIST(I) := 1;
    1056               DBMS_OUTPUT.PUT_LINE(V_PRODUCTCODE ||
    1057                                    '按汇总:INSERTSUMMARYDATA insert 成功 !');
    1058             ELSE
    1059               DBMS_OUTPUT.PUT_LINE(V_PRODUCTCODE ||
    1060                                    '按汇总 没有数据:INSERTSUMMARYDATA insert 失败 !');
    1061               RAISE EXP_SUMMARY;
    1062             
    1063             END IF;
    1064           END IF;
    1065         
    1066         END IF;
    1067       
    1068         --V_ISSUMMARY=1 代表明细; 
    1069       ELSIF V_ISSUMMARY = 1 THEN
    1070       
    1071         IF V_CUSTOMVALUE = 0 THEN
    1072           SELECT COUNT(1)
    1073             INTO V_DETAILCOUNT_1
    1074             FROM FINANCE_BILL_DETAIL FBD
    1075            WHERE FBD.MEMBERID = V_MEMBERID
    1076              AND FBD.BILLDATE = V_DEALMONTH
    1077              AND FBD.PRODUCTCODE = V_PRODUCTCODE
    1078              AND FBD.BATCHNO = V_MAXBATCHNO;
    1079         
    1080           --        DBMS_OUTPUT.PUT_LINE('自定的分组名发送单个市场的');
    1081           IF V_DETAILCOUNT_1 = 0 THEN
    1082             LIST(I) := 0;
    1083             CONTINUE;
    1084           ELSE
    1085           
    1086             IF CUSTOMGROUPNAME_DETAIL(V_UNINO,
    1087                                       V_MEMBERID,
    1088                                       V_PRODUCTCODE,
    1089                                       V_DEALMONTH) THEN
    1090               LIST(I) := 1;
    1091               DBMS_OUTPUT.PUT_LINE('自定的分组明细insert成功 !');
    1092             ELSE
    1093             
    1094               RAISE CUSTOMGROUPEXP_DETAIL;
    1095             END IF;
    1096           END IF;
    1097         ELSIF V_CUSTOMVALUE <> 0 THEN
    1098           SELECT COUNT(1)
    1099             INTO V_DETAILCOUNT_2
    1100             FROM FINANCE_BILL_DETAIL FBD
    1101            WHERE FBD.MEMBERID = V_MEMBERID
    1102              AND FBD.BILLDATE = V_DEALMONTH
    1103              AND FBD.PRODUCTCODE = V_PRODUCTCODE
    1104              AND FBD.BATCHNO = V_MAXBATCHNO
    1105              AND FBD.GROUPNAME = V_GROUPNAME;
    1106           IF V_DETAILCOUNT_2 = 0 THEN
    1107             LIST(I) := 0;
    1108             CONTINUE;
    1109           ELSE
    1110             IF INSERTLINETAB(V_UNINO,
    1111                              V_MEMBERID,
    1112                              V_PRODUCTCODE,
    1113                              V_DEALMONTH) THEN
    1114               LIST(I) := 1;
    1115               DBMS_OUTPUT.PUT_LINE(V_PRODUCTCODE ||
    1116                                    '按明细 ;INSERTLINETAB 执行成功 !');
    1117             ELSE
    1118             
    1119               DBMS_OUTPUT.PUT_LINE(V_PRODUCTCODE ||
    1120                                    '按明细 ;INSERTLINETAB 执行 失败 !');
    1121               RAISE EXP_DETAIL;
    1122             END IF;
    1123           END IF;
    1124         END IF;
    1125       
    1126       END IF;
    1127     END LOOP;
    1128     -- 将head表的主键关联到 TAX_CONTROL_SEND 表headLineTabID;
    1129     IF UPDATETTSENDTAB(V_GROUPID, V_UNINO) THEN
    1130       DBMS_OUTPUT.PUT_LINE('将head表的主键关联到TAX_CONTROL_SEND 表headLineTabID ,执行成功!');
    1131     ELSE
    1132       DBMS_OUTPUT.PUT_LINE('将head表的主键关联到TAX_CONTROL_SEND 表headLineTabID ,执行失败!');
    1133     END IF;
    1134     --整个过程顺利执行完毕后进行commmit ; 
    1135     IF LIST.EXISTS(1) THEN
    1136       LIST.DELETE;
    1137       COMMIT;
    1138     ELSE
    1139       ROLLBACK;
    1140     END IF;
    1141     DBMS_OUTPUT.PUT_LINE('-------------commit !-------------------');
    1142     RESULTFLAG := TRUE;
    1143     RETURN RESULTFLAG;
    1144   EXCEPTION
    1145     WHEN EXP_HEAD THEN
    1146       DBMS_OUTPUT.PUT_LINE('触发 EXP_HEAD 异常,即将对数据 rollback ,并return false!');
    1147       ROLLBACK;
    1148       RETURN RESULTFLAG;
    1149     WHEN EXP_SUMMARY THEN
    1150       DBMS_OUTPUT.PUT_LINE('触发 Exp_Summary 异常,即将对数据 rollback ,并return false!');
    1151       ROLLBACK;
    1152       RETURN RESULTFLAG;
    1153     WHEN EXP_DETAIL THEN
    1154       DBMS_OUTPUT.PUT_LINE('触发 Exp_Detail 异常,即将对数据 rollback ,并return false!');
    1155       ROLLBACK;
    1156       RETURN RESULTFLAG;
    1157     
    1158     WHEN CUSTOMGROUPEXP_DETAIL THEN
    1159       DBMS_OUTPUT.PUT_LINE('触发 CUSTOMGROUPEXP_detail 异常,即将对数据 rollback ,并return false!');
    1160       ROLLBACK;
    1161       RETURN RESULTFLAG;
    1162     WHEN CUSTOMGROUPEXP_SUMMARY_3 THEN
    1163       DBMS_OUTPUT.PUT_LINE('触发 CUSTOMGROUPEXP_SUMMARY_3 异常,即将对数据 rollback ,并return false!');
    1164       ROLLBACK;
    1165       RETURN RESULTFLAG;
    1166     WHEN CUSTOMGROUPEXP_SUMMARY_2 THEN
    1167       DBMS_OUTPUT.PUT_LINE('触发 CUSTOMGROUPEXP_SUMMARY_2 异常,即将对数据 rollback ,并return false!');
    1168       ROLLBACK;
    1169       RETURN RESULTFLAG;
    1170     WHEN OTHERS THEN
    1171       DBMS_OUTPUT.PUT_LINE('INSERT_INVOICE_MAIN_DETAIL触发异常:' || SQLCODE ||
    1172                            SQLERRM || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
    1173     
    1174       ROLLBACK;
    1175       RETURN RESULTFLAG;
    1176     
    1177   END INSERT_INVOICE_MAIN_DETAIL;
    1178 
    1179   /**********************************************************************
    1180   ***FunctionName: INSERTTTSENDTAB
    1181   ***Used as: 将head表的主键关联到 insert 到 TAX_CONTROL_SEND 表headLineTabID;
    1182   ***Date: 2017/0601
    1183   ***Author: Mr.yang
    1184   **********************************************************************/
    1185 
    1186   FUNCTION UPDATETTSENDTAB(IN_GROUPID IN INTEGER, V_UNINO IN VARCHAR2)
    1187     RETURN BOOLEAN AS
    1188     RESULTFLAG BOOLEAN := FALSE;
    1189   BEGIN
    1190   
    1191     UPDATE TAX_CONTROL_SEND S
    1192        SET S.HEADLINETABID = V_UNINO
    1193      WHERE S.GROUPID = IN_GROUPID
    1194        AND ROWID = V_ROWID;
    1195   
    1196     RESULTFLAG := TRUE;
    1197     RETURN RESULTFLAG;
    1198   EXCEPTION
    1199     WHEN OTHERS THEN
    1200       DBMS_OUTPUT.PUT_LINE('INSERTTTSENDTAB:::' || SQLCODE || SQLERRM);
    1201       RETURN RESULTFLAG;
    1202   END UPDATETTSENDTAB;
    1203   /**********************************************************************
    1204   ***FunctionName: EXECUTEPROCEDURE
    1205   ***Used as:执行INSERT_INVOICE_MAIN_DETAIL 整个过程,并更新send表中的insetLocalFlag 标志位 !;
    1206   ***Date: 2017/0601
    1207   ***Author: Mr.yang
    1208   **********************************************************************/
    1209 
    1210   PROCEDURE EXECUTEPROCEDURE AS
    1211   
    1212     V_GROUPID TAX_CONTROL_SEND.GROUPID%TYPE;
    1213     EXP_GROUPIDISNULL EXCEPTION;
    1214     CURSOR CUR_EXECPRO IS
    1215       SELECT S.GROUPID, S.GOODS, S.GROUPNAME, S.PRODUCTLIST, S.ROWID
    1216         FROM TAX_CONTROL_SEND S
    1217        WHERE S.SENDSTATE = 0
    1218          AND S.LOCALINSERTFLAG IS NULL
    1219        ORDER BY S.GROUPID;
    1220   BEGIN
    1221     OPEN CUR_EXECPRO;
    1222     LOOP
    1223       V_ROWID := NULL;
    1224       FETCH CUR_EXECPRO
    1225         INTO V_GROUPID, V_GOODS, V_GROUPNAME, V_PRODUCTGROUPNAME, V_ROWID;
    1226       IF V_GROUPID IS NULL THEN
    1227         DBMS_OUTPUT.PUT_LINE('V_GROUPID IS  NULL 触发EXP_GROUPIDISNULL异常!');
    1228         RAISE EXP_GROUPIDISNULL;
    1229       END IF;
    1230       DBMS_OUTPUT.PUT_LINE('V_GROUPID=========' || V_GROUPID);
    1231       EXIT WHEN CUR_EXECPRO%NOTFOUND;
    1232       IF INSERT_INVOICE_MAIN_DETAIL(V_GROUPID) THEN
    1233       
    1234         UPDATE TAX_CONTROL_SEND T
    1235            SET T.LOCALINSERTFLAG = 1
    1236          WHERE ROWID = V_ROWID;
    1237       
    1238         DBMS_OUTPUT.PUT_LINE('修改send表的groupid= ' || V_GROUPID ||
    1239                              'localinsertflag等于1为成功状态!');
    1240       ELSE
    1241       
    1242         UPDATE TAX_CONTROL_SEND T
    1243            SET T.LOCALINSERTFLAG = 0
    1244          WHERE ROWID = V_ROWID;
    1245       
    1246         DBMS_OUTPUT.PUT_LINE('修改send表的groupid= ' || V_GROUPID ||
    1247                              ' localinsertflag等于0为失败状态!');
    1248       
    1249       END IF;
    1250       COMMIT;
    1251     END LOOP;
    1252     --执行commit ;
    1253   
    1254     CLOSE CUR_EXECPRO;
    1255   
    1256     RETURN;
    1257   EXCEPTION
    1258     WHEN EXP_GROUPIDISNULL THEN
    1259       CLOSE CUR_EXECPRO;
    1260       RETURN;
    1261     WHEN OTHERS THEN
    1262       DBMS_OUTPUT.PUT_LINE('EXECUTEPROCEDURE 触发异常:' || SQLCODE || SQLERRM ||
    1263                            DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
    1264       RETURN;
    1265   END EXECUTEPROCEDURE;
    1266 
    1267 END TAX_CONTROL_SENDS;
  • 相关阅读:
    有return的情况下try catch finally的执行顺序
    for循环和foreach循环效率对比
    SpringBoot_数据访问-整合MyBatis-配置版MyBatis
    作品
    HTML——招生信息网(bootstrap、WOW动画、blueimp-gallery图片展示插件)
    HTML——信息技术基础精品课程
    HTML——校友会(bootstrap)
    毕设——社区志愿者信息管理系统
    HTML笔记——JS下载.json文件
    HTML笔记——bootstrap-select、table、tableExport、layer
  • 原文地址:https://www.cnblogs.com/linbo3168/p/7270252.html
Copyright © 2020-2023  润新知