示例#1
0
        /// <summary>
        /// 保存交易
        /// </summary>
        /// <param name="saleFlow"></param>
        /// <param name="payFlow"></param>
        /// <param name="card"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public static bool SaveTrade(MSaleFlow[] saleFlow, MPayFlow[] payFlow, out MCzCard card, out string msg)
        {
            if (saleFlow.Length == 0 || payFlow.Length == 0)
            {
                msg  = "流水不完整";
                card = null;
                return(false);
            }

            //查询储值卡信息
            if (!CzkDAL.GetCzCard(payFlow.First().Ref_no, out card, out msg))
            {
                return(false);
            }
            //检测卡余额
            if (card.Total - card.CzkType.KbMoney < payFlow.First().Total)
            {
                msg = "该卡余额不足";
                return(false);
            }
            //扣减余额
            card.Total   -= payFlow.First().Total;
            card.XfTotal += payFlow.First().Total;

            SqlTransaction tran;

            //开启事务
            if (!DBTool.BeginTransaction(out tran, out msg))
            {
                return(false);
            }
            //插入商品流水
            if (!SaveSaleFlow(saleFlow, tran, out msg))
            {
                if (DBTool.RollbackTransaction(tran, out msg))
                {
                    msg = "保存商品流水失败";
                    return(false);
                }
                else
                {
                    msg = "保存商品流水错误,回滚操作失败";
                    return(false);
                }
            }
            //插入付款流水
            if (!SavePayFlow(payFlow, tran, out msg))
            {
                if (DBTool.RollbackTransaction(tran, out msg))
                {
                    msg = "保存付款流水失败";
                    return(false);
                }
                else
                {
                    msg = "保存付款流水错误,回滚操作失败";
                    return(false);
                }
            }
            //保存储值卡信息
            if (!CzkDAL.SaveCzCard(card, tran, out msg))
            {
                if (DBTool.RollbackTransaction(tran, out msg))
                {
                    msg = "保存储值卡信息失败";
                    return(false);
                }
                else
                {
                    msg = "保存储值卡错误,回滚操作失败";
                    return(false);
                }
            }
            //提交事务
            if (!DBTool.CommitTransaction(tran, out msg))
            {
                msg = "提交事务失败,已回滚";
                return(false);
            }
            //交易成功,查询余额
            if (!CzkDAL.GetCzCard(payFlow.First().Ref_no, out card, out msg))
            {
                msg = "交易成功后确认余额失败";
            }
            return(true);
        }