예제 #1
0
        public MessageLocal saveOrUpdatePurchaseOrder(Order order)
        {
            MessageLocal msg = new MessageLocal();

            SqlConnection             con     = SessionFactory.getConnection();
            SqlTransaction            sqlTran = con.BeginTransaction(IsolationLevel.RepeatableRead);
            LinkedList <SqlParameter> prams   = new LinkedList <SqlParameter>();

            try
            {
                if ("".Equals(order.Sn))
                {
                    order.Sn = constructSN(sqlTran);
                }
                msg = baseDao.runProcedureTran("saveOrUpdate_order", constructParamsForOrder(order), "order", sqlTran);
                if (!msg.IsSucess)
                {
                    throw new Exception(msg.Message);
                }

                if (order.Id < 0)
                {
                    DataSet dataset = database.RunProcReturnTran("SELECT id FROM tb_order WHERE sn = '" + order.Sn + "'", "tb_order", CommandType.Text, sqlTran);
                    if (null != dataset && dataset.Tables[0].Rows.Count > 0)
                    {
                        order.Id = int.Parse(getValue(dataset, "id"));
                    }
                    else
                    {
                        throw new Exception("查询订单编号【" + order.Sn + "】失败!");
                    }
                }

                foreach (OrderItem item in order.OrderItems)
                {
                    msg = baseDao.runProcedureTran("saveOrUpdate_order_item", constructParamsForOrderItem(item), "order_item", sqlTran);
                    if (!msg.IsSucess)
                    {
                        throw new Exception(msg.Message);
                    }
                    item.Id = int.Parse(msg.Message);
                }

                foreach (OrderStats stats in order.OrderStats)
                {
                    msg = baseDao.runProcedureTran("saveOrUpdate_order_stats", constructParamsForOrderStats(stats), "order_stats", sqlTran);
                    if (!msg.IsSucess)
                    {
                        throw new Exception(msg.Message);
                    }
                    stats.Id = int.Parse(msg.Message);
                }
                sqlTran.Commit();
            }catch (Exception e)
            {
                sqlTran.Rollback();
                msg.Message  = "保存失败!" + e.Message;
                msg.IsSucess = false;
                Console.WriteLine(e.StackTrace);
                return(msg);
            }finally
            {
                con.Close();
            }
            msg.IsSucess = true;

            return(msg);
        }