/// <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); } }