Ejemplo n.º 1
0
 /// <summary>
 /// 执行递归扣取结存数据
 /// </summary>
 /// <param name="daBalance">操作结存表的数据适配器</param>
 /// <param name="prevProcName">上部门名称</param>
 /// <param name="lotId">批量卡序号</param>
 /// <param name="pnlQty">pnl数量</param>
 /// <param name="pcsQty">pcs数量</param>
 /// <returns></returns>
 internal static bool DecreaseMantissaBalance(
     t_mantissa_lot_card_balanceTableAdapter daBalance,
     string prevProcName,
     string lotId,
     int pnlQty,
     int pcsQty
 )
 {
     try
     {
         //检测是否数量不正确
         if (pnlQty < 0 || pcsQty < 0)
         {
             throw new Exception("待扣减的pnl数量和pcs数量不能同时小于0!");
         }
         if (pnlQty > 0 && pcsQty > 0)
         {
             throw new Exception("待扣减的pnl数量和pcs数量不能同时大于0!");
         }
         if (pnlQty + pcsQty <= 0)
         {
             throw new Exception("待扣减的pnl数量和pcs数量不能同时为0!");
         }
         //扣减后剩余数量
         object iQty;
         //执行扣取已入库批量卡余数
         if (pnlQty > 0)
         {
             //扣减后剩余数量
             iQty = UpdateBalancePnlQtyByPrevProcAndLotId(
                 daBalance.Transaction,
                 prevProcName,
                 lotId,
                 pnlQty
            );
         }
         else
         {
             //扣减后剩余数量
             iQty = UpdateBalancePcsQtyByPrevProcAndLotId(
                 daBalance.Transaction,
                 prevProcName,
                 lotId,
                 pcsQty
             );
         }
         //检测扣数是否成功
         if (iQty == null || iQty == DBNull.Value)
         {
             throw new Exception("尾数结存不够扣数!");
         }
         //检测返回的结果
         int qty;
         if (!int.TryParse(iQty.ToString(), out qty))
         {
             throw new Exception("尾数结存扣数后的返回值不是正确的整数!");
         }
         //检测是否需要递归扣数
         if (qty < 0)
         {
             //重设待扣减数量
             pnlQty = pnlQty > 0 ? -qty : 0;
             pcsQty = pnlQty > 0 ? 0 : -qty;
             //执行递归扣减
             if (!DecreaseMantissaBalance(
                 daBalance,
                 prevProcName,
                 lotId,
                 pnlQty,
                 pcsQty
             ))
             {
                 return false;
             };
         }
         else
         {
             //删除小于或等于0的记录清单
             daBalance.DeleteEmptyData();
         }
         //返回成功
         return true;
     }
     catch (Exception ex)
     {
         //抛出错误
         throw new Exception("执行扣减尾数结存数时发生错误:\n" + ex.Message);
     }
 }