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