ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 资金表实现过程方案一:资金表与冻结表合并(三)

资金表实现过程方案一:资金表与冻结表合并(三)

原创 Linux操作系统 作者:golden_zhou 时间:2012-10-08 11:42:02 0 删除 编辑
3. update 存储过程
 
CREATE OR REPLACE PROCEDURE PAYT.SP_BALANCE_FOR_UPDATING (
   P_MONEY         IN FLOAT,                                      --新结算金额
   P_CATEGORY_ID   IN NUMBER,                           --类别ID:1.投入,0.支出
   P_MEMBER_ID     IN NUMBER,                                         --会员ID
   P_MERCHANT_ID   IN NUMBER,                                         --商户ID
   P_OLDMONEY      IN FLOAT,                                      --原结算金额
   P_VALID         IN NUMBER,                   --新值是否有效:1.不解凍 0.解凍
   P_OLDVALID      IN NUMBER                    --原值是否有效:1.不解凍 0.解凍
)
IS
   V_MONEY         FLOAT (126);                                   --新结算金额
   V_CATEGORY_ID   NUMBER (19);                         --类别ID:1.投入,0.支出
   V_MEMBER_ID     NUMBER (19);                                       --会员ID
   V_MERCHANT_ID   NUMBER (19);                                       --商户ID
   V_OLDMONEY      FLOAT (126);                                   --原结算金额
   V_VALID         NUMBER (1);                  --新值是否有效:1.不解凍 0.解凍
   V_OLDVALID      NUMBER (1);                  --原值是否有效:1.不解凍 0.解凍
   V_DIFF          FLOAT (126);                               --新旧值差异金额
   V_BALANCE       FLOAT (126);                           --商戶或會員結算余額
BEGIN
   V_MONEY := P_MONEY;                                            --新结算金额
   V_CATEGORY_ID := P_CATEGORY_ID;                      --类别ID:1.投入,0.支出
   V_MEMBER_ID := P_MEMBER_ID;                                        --会员ID
   V_MERCHANT_ID := P_MERCHANT_ID;                                    --商户ID
   V_OLDMONEY := P_OLDMONEY;                                      --原结算金额
   V_VALID := P_VALID;                          --新值是否有效:1.不解凍 0.解凍
   V_OLDVALID := P_OLDVALID;                    --原值是否有效:1.不解凍 0.解凍
   V_DIFF := 0;                                               --新旧值差异金额
   V_BALANCE := 0;                                        --商戶或會員結算余額
   ----------------------------------------------------------------------------
   --       CATEGORY                         ID             DNAME            --
   --       TradeSettlementCategory         506            转帐支出          --
   --       TradeSettlementCategory         505            退款支出          --
   --       TradeSettlementCategory         507            提现支出          --
   --       TradeSettlementCategory         508            手续费支出        --
   --       TradeSettlementCategory         509            返点收入          --
   --       TradeSettlementCategory         504            支付收入          --
   ----------------------------------------------------------------------------

   SELECT   v_money - v_oldmoney INTO v_diff FROM DUAL;
   CASE
      /*变更商户投入金额*/
      WHEN V_MEMBER_ID IS NULL AND V_CATEGORY_ID IN (504, 509)      --商户投入
      THEN
         IF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff > 0
         --投入尚未成交并追加投入
         THEN
            UPDATE   tab_merchantfund
               SET   balance = balance + v_diff,
                     totalearning = totalearning + v_diff,
                     usebalance = usebalance + v_diff
             WHERE   merchant_id = v_merchant_id;
         ELSIF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff < 0
         --投入尚未成交并减少投入
         THEN
            UPDATE   tab_merchantfund
               SET   balance = balance + v_diff,
                     totalearning = totalearning + v_diff,
                     usebalance = usebalance + v_diff
             WHERE   merchant_id = v_merchant_id;
         ELSIF V_OLDVALID = 1 AND V_VALID = 0                   --投入正常使用
         THEN
            DBMS_OUTPUT.PUT_LINE ('OK');
         ELSIF V_OLDVALID = 0 --投入已经成交则不能修改,只能新增投入,加一笔记录
         THEN
            raise_application_error (-20001, 'Have deal, refused to update!');
         END IF;
      /*变更商户支出金额*/
      WHEN V_MEMBER_ID IS NULL AND V_CATEGORY_ID IN (505, 506, 507, 508)
      --商户支出
      THEN
         SELECT   balance
           INTO   v_balance
           FROM   tab_merchantfund
          WHERE   merchant_id = v_merchant_id;
         IF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff > 0
         --支出尚未成交并追加支出
         THEN
            IF V_BALANCE >= V_DIFF                    --目前没考虑手续费的问题
            THEN
               UPDATE   tab_merchantfund
                  SET   frozenprice = frozenprice + v_diff,
                        usebalance = usebalance - v_diff
                WHERE   merchant_id = v_merchant_id;
            ELSE
               raise_application_error (
                  -20001,
                  'Balance is insufficient, please phone!'
               );
            END IF;
         ELSIF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff < 0
         --支出尚未成交并减少支出
         THEN
            UPDATE   tab_merchantfund
               SET   frozenprice = frozenprice + v_diff,
                     usebalance = usebalance - v_diff
             WHERE   merchant_id = v_merchant_id;
         ELSIF V_OLDVALID = 1 AND V_VALID = 0      --支出正常成交,支出金額解凍
         THEN
            UPDATE   tab_merchantfund
               SET   balance = balance - v_oldmoney,
                     frozenprice = frozenprice - v_oldmoney,
                     totalpayout = totalpayout + v_oldmoney
             WHERE   merchant_id = v_merchant_id;
         ELSIF V_OLDVALID = 0 --支出已经成交则不能修改,只能新增支出,加一笔记录
         THEN
            raise_application_error (-20001, 'Have deal, refused to update!');
         END IF;
      /*变更會員投入金额*/
      WHEN V_MERCHANT_ID IS NULL AND V_CATEGORY_ID IN (504, 509)    --会员投入
      THEN
         IF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff > 0
         --投入尚未成交并追加投入
         THEN
            UPDATE   tab_memberfund
               SET   balance = balance + v_diff,
                     totalearning = totalearning + v_diff,
                     usebalance = usebalance + v_diff
             WHERE   member_id = v_member_id;
         ELSIF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff < 0
         --投入尚未成交并减少投入
         THEN
            UPDATE   tab_memberfund
               SET   balance = balance + v_diff,
                     totalearning = totalearning + v_diff,
                     usebalance = usebalance + v_diff
             WHERE   member_id = v_member_id;
         ELSIF V_OLDVALID = 1 AND V_VALID = 0                   --投入正常使用
         THEN
            DBMS_OUTPUT.PUT_LINE ('OK');
         ELSIF V_OLDVALID = 0 --投入已经成交则不能修改,只能新增投入,加一笔记录
         THEN
            raise_application_error (-20001, 'Have deal, refused to update!');
         END IF;
      /*变更会员支出金额*/
      WHEN V_MERCHANT_ID IS NULL AND V_CATEGORY_ID IN (505, 506, 507, 508)
      --会员支出
      THEN
         SELECT   balance
           INTO   v_balance
           FROM   tab_memberfund
          WHERE   member_id = v_member_id;
         IF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff > 0
         --支出尚未成交并追加支出
         THEN
            IF V_BALANCE >= V_DIFF                      --目前没考虑手续费问题
            THEN
               UPDATE   tab_memberfund
                  SET   frozenprice = frozenprice + v_diff,
                        usebalance = usebalance - v_diff
                WHERE   member_id = v_member_id;
            ELSE
               raise_application_error (
                  -20001,
                  'Balance is insufficient, please phone!'
               );
            END IF;
         ELSIF V_OLDVALID = 1 AND V_VALID = 1 AND v_diff < 0
         --支出尚未成交并减少支出
         THEN
            UPDATE   tab_memberfund
               SET   frozenprice = frozenprice + v_diff,
                     usebalance = usebalance - v_diff
             WHERE   member_id = v_member_id;
         ELSIF V_OLDVALID = 1 AND V_VALID = 0      --支出正常成交,支出金額解凍
         THEN
            UPDATE   tab_memberfund
               SET   balance = balance - v_oldmoney,
                     frozenprice = frozenprice - v_oldmoney,
                     totalpayout = totalpayout + v_oldmoney
             WHERE   member_id = v_member_id;
         ELSIF V_OLDVALID = 0 --支出已经成交则不能修改,只能新增支出,加一笔记录
         THEN
            raise_application_error (-20001, 'Have deal, refused to update!');
         END IF;
   END CASE;
END;
/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25198367/viewspace-745864/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-03-09

  • 博文量
    238
  • 访问量
    344440