/// <summary>
 /// 得到一个对象实体
 /// </summary>
 public OrderDetInfo DataRowToOrderDetModel(DataRow row)
 {
     OrderDetInfo model = new OrderDetInfo();
     if (row != null)
     {
         if (row["ORDERDETID"] != null)
         {
             model.ORDERDETID = row["ORDERDETID"].ToString();
         }
         if (row["ORDERID"] != null)
         {
             model.ORDERID = row["ORDERID"].ToString();
         }
         if (row["CONTACTID"] != null)
         {
             model.CONTACTID = row["CONTACTID"].ToString();
         }
         if (row["PRODUCTTYPE1"] != null)
         {
             model.PRODUCTTYPE1 = row["PRODUCTTYPE1"].ToString();
         }
         if (row["SOLDWITH"] != null)
         {
             model.SOLDWITH = row["SOLDWITH"].ToString();
         }
         if (row["STATUS"] != null)
         {
             model.STATUS = row["STATUS"].ToString();
         }
         if (row["RECKONING"] != null)
         {
             model.RECKONING = row["RECKONING"].ToString();
         }
         if (row["RECKONINGDT"] != null && row["RECKONINGDT"].ToString() != "")
         {
             model.RECKONINGDT = row["RECKONINGDT"].ToString();
         }
         if (row["FBDT"] != null && row["FBDT"].ToString() != "")
         {
             model.FBDT = row["FBDT"].ToString();
         }
         if (row["UPRICE"] != null && row["UPRICE"].ToString() != "")
         {
             model.UPRICE = row["UPRICE"].ToString();
         }
         if (row["PRODNUM"] != null && row["PRODNUM"].ToString() != "")
         {
             model.PRODNUM = row["PRODNUM"].ToString();
         }
         if (row["FREIGHT"] != null && row["FREIGHT"].ToString() != "")
         {
             model.FREIGHT = row["FREIGHT"].ToString();
         }
         if (row["PAYMENT"] != null && row["PAYMENT"].ToString() != "")
         {
             model.PAYMENT = row["PAYMENT"].ToString();
         }
         if (row["POSTFEE"] != null && row["POSTFEE"].ToString() != "")
         {
             model.POSTFEE = row["POSTFEE"].ToString();
         }
         if (row["CLEARFEE"] != null && row["CLEARFEE"].ToString() != "")
         {
             model.CLEARFEE = row["CLEARFEE"].ToString();
         }
         if (row["CRDT"] != null && row["CRDT"].ToString() != "")
         {
             model.CRDT = row["CRDT"].ToString();
         }
         if (row["BREASON"] != null)
         {
             model.BREASON = row["BREASON"].ToString();
         }
         if (row["FEEDBACK"] != null)
         {
             model.FEEDBACK = row["FEEDBACK"].ToString();
         }
         if (row["GOODSBACK"] != null)
         {
             model.GOODSBACK = row["GOODSBACK"].ToString();
         }
         if (row["BACKDT"] != null && row["BACKDT"].ToString() != "")
         {
             model.BACKDT = row["BACKDT"].ToString();
         }
         if (row["BACKMONEY"] != null && row["BACKMONEY"].ToString() != "")
         {
             model.BACKMONEY = row["BACKMONEY"].ToString();
         }
         if (row["CARDRIGHTNUM"] != null)
         {
             model.CARDRIGHTNUM = row["CARDRIGHTNUM"].ToString();
         }
         if (row["ACCOUNTINGCOST"] != null && row["ACCOUNTINGCOST"].ToString() != "")
         {
             model.ACCOUNTINGCOST = row["ACCOUNTINGCOST"].ToString();
         }
         if (row["PRODBANKID"] != null)
         {
             model.PRODBANKID = row["PRODBANKID"].ToString();
         }
         if (row["ISREFUND"] != null)
         {
             model.ISREFUND = row["ISREFUND"].ToString();
         }
         if (row["REFUNDDT"] != null && row["REFUNDDT"].ToString() != "")
         {
             model.REFUNDDT = row["REFUNDDT"].ToString();
         }
         if (row["PRODDETID"] != null)
         {
             model.PRODDETID = row["PRODDETID"].ToString();
         }
         
     }
     return model;
 }
        public void deleteAddOrderDetData(SqlLib lib, IDb db, object obj, ref DataTable outOrderDetDt)
        {
            string sql = "";
            bool ret = true;
            try
            {
                OrderDetInfo OrderDetinfo = new OrderDetInfo();
                ret = DataHandle.CompareObjectType(obj, OrderDetinfo);
                if (ret)
                {
                    OrderDetinfo = (OrderDetInfo)obj;
                }
                else
                {
                    return;
                }
                if (outOrderDetDt == null)
                {
                    throw new NullReferenceException("outOrderDetInfo is null");
                }
                DataTable localdt = new DataTable();
                sql = lib.GetSql("SqlOrderDetInfo/OrderDetInfo", "GetOrderDetInfo");

                if (!string.IsNullOrEmpty(OrderDetinfo.ORDERDETID))
                {
                    sql += " and ORDERDETID='" + OrderDetinfo.ORDERDETID + " '";
                }
                else
                {
                    throw new NullReferenceException("保单详细信息不能为空");
                }
                if (!string.IsNullOrEmpty(sql))
                {
                    localdt = db.GetTable(sql);
                }

                for (int i = 0; i < localdt.Rows.Count; i++)
                {
                    DataRow dr = localdt.Rows[i];
                    dr.Delete();
                }
            }
            catch (NullReferenceException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in deleteContractData" + ex.Message);
            }
            catch (ArrayTypeMismatchException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in deleteContractData" + ex.Message);
            }
            catch (Exception ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in deleteContractData" + ex.Message);
                throw;
            }
        }
        public void addNewOrderDetData(SqlLib lib, IDb db, object obj, ref DataTable outOrderDetDt)
        {
            string sql = "";
            string localID = "";
            bool ret = false;
            try
            {
                OrderDetInfo li = new OrderDetInfo();
                ret = DataHandle.CompareObjectType(obj, li);
                if (ret)
                {
                    li = (OrderDetInfo)obj;
                }
                else
                {
                    return;
                }
                if (outOrderDetDt == null)
                {
                    throw new NullReferenceException("outOrderDetDt is null");
                }
                DataTable localDt = new DataTable();
                //只取一条记录,以便得到表结构,如果一条都没有,那么会有什么结果?能够取出表结构。
                sql = lib.GetSql("SqlOrderDetInfo/OrderDetInfo", "GetOrderDetStructInfo");
                localDt = db.GetTable(sql);

                //新增加的记录,在oracle中需要取到sequence编号
                sql = lib.GetSql("SqlOrderDetInfo/OrderDetInfo", "GetNewOrderDetId");
                DataTable dt = new DataTable();
                dt = db.GetTable(sql);
                if (dt.Rows.Count > 0)
                {
                    localID = dt.Rows[0][0].ToString();
                    dt.Reset();
                }
                if (string.IsNullOrEmpty(localID))
                {
                    return;
                }
                DataRow dr = localDt.NewRow();
                dr["ORDERDETID"] = DataHandle.EmptyString2DBNull(localID);
                dr["ACCOUNTINGCOST"] = DataHandle.EmptyString2DBNull(li.ACCOUNTINGCOST);
                dr["BACKDT"] = DataHandle.EmptyString2DBNull(li.BACKDT);
                dr["BACKMONEY"] = DataHandle.EmptyString2DBNull(li.BACKMONEY);
                dr["BREASON"] = DataHandle.EmptyString2DBNull(li.BREASON);
                dr["CARDRIGHTNUM"] = DataHandle.EmptyString2DBNull(li.CARDRIGHTNUM);
                dr["CLEARFEE"] = DataHandle.EmptyString2DBNull(li.CLEARFEE);
                dr["CONTACTID"] = DataHandle.EmptyString2DBNull(li.CONTACTID);
                dr["CRDT"] = DataHandle.EmptyString2DBNull(li.CRDT);
                dr["FBDT"] = DataHandle.EmptyString2DBNull(li.FBDT);
                dr["FEEDBACK"] = DataHandle.EmptyString2DBNull(li.FEEDBACK);
                dr["FREIGHT"] = DataHandle.EmptyString2DBNull(li.FREIGHT);
                dr["GOODSBACK"] = DataHandle.EmptyString2DBNull(li.GOODSBACK);
                dr["ISREFUND"] = DataHandle.EmptyString2DBNull(li.ISREFUND);
                dr["ORDERID"] = DataHandle.EmptyString2DBNull(li.ORDERID);
                dr["PAYMENT"] = DataHandle.EmptyString2DBNull(li.PAYMENT);
                dr["POSTFEE"] = DataHandle.EmptyString2DBNull(li.POSTFEE);
                dr["PRODBANKID"] = DataHandle.EmptyString2DBNull(li.PRODBANKID);
                dr["PRODDETID"] = DataHandle.EmptyString2DBNull(li.PRODDETID);
                dr["PRODNUM"] = DataHandle.EmptyString2DBNull(li.PRODNUM);
                dr["PRODUCTTYPE1"] = DataHandle.EmptyString2DBNull(li.PRODUCTTYPE1);
                dr["RECKONING"] = DataHandle.EmptyString2DBNull(li.RECKONING);
                dr["RECKONINGDT"] = DataHandle.EmptyString2DBNull(li.RECKONINGDT);
                dr["REFUNDDT"] = DataHandle.EmptyString2DBNull(li.REFUNDDT);
                dr["SOLDWITH"] = DataHandle.EmptyString2DBNull(li.SOLDWITH);
                dr["STATUS"] = DataHandle.EmptyString2DBNull(li.STATUS);
                dr["UPRICE"] = DataHandle.EmptyString2DBNull(li.UPRICE);

                localDt.Rows.Add(dr);
                outOrderDetDt.Merge(localDt, true);
            }
            catch (NullReferenceException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in addNewOrderDetData" + ex.Message);
            }
            catch (ArrayTypeMismatchException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in addNewOrderDetData" + ex.Message);
            }
            catch (Exception ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in addNewOrderDetData" + ex.Message);
                throw;
            }
        }
        public void updateOrderDetData(SqlLib lib, IDb db, object obj, ref DataTable outOrderDetDt)
        {
            string sql = "";
            bool ret = true;
            try
            {
                OrderDetInfo li = new OrderDetInfo();
                ret = DataHandle.CompareObjectType(obj, li);
                if (ret)
                {
                    li = (OrderDetInfo)obj;
                }
                else
                {
                    return;
                }
                if (outOrderDetDt == null)
                {
                    throw new NullReferenceException("outOrderDerDt is null");
                }
                DataTable localDt = new DataTable();
                //根据Id更新一条数据信息
                sql = lib.GetSql("SqlOrderDetInfo/OrderDetInfo", "GetOrderDetInfo");
                localDt = db.GetTable(sql);
                if (!string.IsNullOrEmpty(li.ORDERID))
                {
                    sql += " and ORDERDETID='" + li.ORDERDETID + "'";
                    localDt = db.GetTable(sql);
                    if (localDt.Rows.Count > 0)
                    {
                        DataRow dr = localDt.NewRow();
                        dr["ORDERDETID"] = DataHandle.EmptyString2DBNull(li.ORDERDETID);
                        dr["ACCOUNTINGCOST"] = DataHandle.EmptyString2DBNull(li.ACCOUNTINGCOST);
                        dr["BACKDT"] = DataHandle.EmptyString2DBNull(li.BACKDT);
                        dr["BACKMONEY"] = DataHandle.EmptyString2DBNull(li.BACKMONEY);
                        dr["BREASON"] = DataHandle.EmptyString2DBNull(li.BREASON);
                        dr["CARDRIGHTNUM"] = DataHandle.EmptyString2DBNull(li.CARDRIGHTNUM);
                        dr["CLEARFEE"] = DataHandle.EmptyString2DBNull(li.CLEARFEE);
                        dr["CONTACTID"] = DataHandle.EmptyString2DBNull(li.CONTACTID);
                        dr["CRDT"] = DataHandle.EmptyString2DBNull(li.CRDT);
                        dr["FBDT"] = DataHandle.EmptyString2DBNull(li.FBDT);
                        dr["FEEDBACK"] = DataHandle.EmptyString2DBNull(li.FEEDBACK);
                        dr["FREIGHT"] = DataHandle.EmptyString2DBNull(li.FREIGHT);
                        dr["GOODSBACK"] = DataHandle.EmptyString2DBNull(li.GOODSBACK);
                        dr["ISREFUND"] = DataHandle.EmptyString2DBNull(li.ISREFUND);
                        dr["ORDERID"] = DataHandle.EmptyString2DBNull(li.ORDERID);
                        dr["PAYMENT"] = DataHandle.EmptyString2DBNull(li.PAYMENT);
                        dr["POSTFEE"] = DataHandle.EmptyString2DBNull(li.POSTFEE);
                        dr["PRODBANKID"] = DataHandle.EmptyString2DBNull(li.PRODBANKID);
                        dr["PRODDETID"] = DataHandle.EmptyString2DBNull(li.PRODDETID);
                        dr["PRODNUM"] = DataHandle.EmptyString2DBNull(li.PRODNUM);
                        dr["PRODUCTTYPE1"] = DataHandle.EmptyString2DBNull(li.PRODUCTTYPE1);
                        dr["RECKONING"] = DataHandle.EmptyString2DBNull(li.RECKONING);
                        dr["RECKONINGDT"] = DataHandle.EmptyString2DBNull(li.RECKONINGDT);
                        dr["REFUNDDT"] = DataHandle.EmptyString2DBNull(li.REFUNDDT);
                        dr["SOLDWITH"] = DataHandle.EmptyString2DBNull(li.SOLDWITH);
                        dr["STATUS"] = DataHandle.EmptyString2DBNull(li.STATUS);
                        dr["UPRICE"] = DataHandle.EmptyString2DBNull(li.UPRICE);
                        dr.EndEdit();
                        outOrderDetDt.Merge(localDt, true);
                    }
                }
            }
            catch (NullReferenceException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in updateOrderDetData" + ex.Message);
            }
            catch (ArrayTypeMismatchException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in updateOrderDetData" + ex.Message);
            }
            catch (Exception ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in updateOrderDetData" + ex.Message);
                throw;
            }

        }
        public List<OrderInfo> outOrderInfo(string queryString)
        {
            List<OrderInfo> localOrderInfo = new List<OrderInfo>();

            if (string.IsNullOrEmpty(queryString))
            {
                return localOrderInfo;
            }
            try
            {

                CTrace.WriteLine(CTrace.TraceLevel.Info, "Insurance outProductDetInfoSearch Search.");

                SqlLib lib = SpecialSqlLib.CreateLib();
                IDb db = DataManager.CreateDb();
                if (db != null)
                {
                    string sql = "";
                    string sqlInsuranceUsrInfo = "";

                    DataTable localInsuranceUsrInfodt = new DataTable();
                    /// 投保人 受益人 被保人 的sql
                    sqlInsuranceUsrInfo = lib.GetSql("SqlInsuranceUsrInfo/InsuranceUsrInfo", "GetInsuranceUsrInfo");

                    sql = lib.GetSql("SqlOrderInfo/OrderInfo", "GetOrderHistInfo");
                    sql = sql + queryString;


                    /// 保险人信息
                    InsuranceUsrInfo localInsuranceUsrInfo = new InsuranceUsrInfo();

                    CTrace.WriteLine(CTrace.TraceLevel.Info, "insurance.outOrderInfo sql={0}.", sql);
                    DataTable dt = db.GetTable(sql);

                    OrderInfo model = new OrderInfo();

                    foreach (DataRow row in dt.Rows)
                    {


                        if (row != null)
                        {
                            model = DataRowToOrderModel(row);
                            OrderDetInfo localOrderDetInfo = new OrderDetInfo();

                            DataTable dtOrderDetInfo = new DataTable();
                            sql = lib.GetSql("SqlOrderDetInfo/OrderDetInfo", "GetOrderDetInfo");
                            sql = string.Format(sql + " and orderid = '{0}' ", model.ORDERID);
                            dtOrderDetInfo = db.GetTable(sql);

                            foreach (DataRow rowDet in dtOrderDetInfo.Rows)
                            {
                                localOrderDetInfo = DataRowToOrderDetModel(rowDet);
                                model.ORDERDETINFO.Add(localOrderDetInfo);
                            }


                            /// 增加被保人信息

                            string sqlLSTINSURANT = string.Format(sqlInsuranceUsrInfo + " and insurance_usrid = '{0}' ", model.INSURANT);
                            localInsuranceUsrInfodt = db.GetTable(sqlLSTINSURANT);


                            if (localInsuranceUsrInfodt != null && localInsuranceUsrInfodt.Rows.Count > 0)
                            {
                                DataRow rowDet = localInsuranceUsrInfodt.Rows[0];
                                localInsuranceUsrInfo = DataRowToInsuranceUsrInfoModel(rowDet);
                                model.Insurant_usr = localInsuranceUsrInfo;
                            }



                            /// 收益人信息
                            InsuranceUsrInfo localBENEFICIARIES = new InsuranceUsrInfo();


                            string strBENEFICIARIES = "";
                            if (!string.IsNullOrEmpty(model.BENEFICIARIES))
                            {
                                strBENEFICIARIES = "'" + model.BENEFICIARIES + "'";
                            }
                            if (!string.IsNullOrEmpty(model.BENEFICIARIES2))
                            {
                                strBENEFICIARIES += ",'" + model.BENEFICIARIES2 + "'";
                            }
                            if (!string.IsNullOrEmpty(model.BENEFICIARIES3))
                            {
                                strBENEFICIARIES += ",'" + model.BENEFICIARIES3 + "'";
                            }
                            string sqlLstbeneficiaries = string.Format(sqlInsuranceUsrInfo + " and insurance_usrid in ({0}) ", strBENEFICIARIES);
                            localInsuranceUsrInfodt = db.GetTable(sqlLstbeneficiaries);

                            foreach (DataRow rowDet in localInsuranceUsrInfodt.Rows)
                            {
                                localInsuranceUsrInfo = DataRowToInsuranceUsrInfoModel(rowDet);
                                if (localInsuranceUsrInfo != null)
                                    model.Lstbeneficiaries.Add(localInsuranceUsrInfo);
                            }



                            /// 投保人信息
                            InsuranceUsrInfo localPOLICYHOLDER = new InsuranceUsrInfo();
                            string sqlLstpolicyholder = string.Format(sqlInsuranceUsrInfo + " and insurance_usrid = '{0}' ", model.POLICYHOLDER);
                            localInsuranceUsrInfodt = db.GetTable(sqlLstpolicyholder);


                            if (localInsuranceUsrInfodt != null && localInsuranceUsrInfodt.Rows.Count > 0)
                            {
                                DataRow rowDet = localInsuranceUsrInfodt.Rows[0];
                                localInsuranceUsrInfo = DataRowToInsuranceUsrInfoModel(rowDet);
                                model.Policyholder_usr = localInsuranceUsrInfo;
                            }


                            localOrderInfo.Add(model);

                        }
                    }

                    CTrace.WriteLine(CTrace.TraceLevel.Info, "insurance.outProductDetInfoSearch GetTable {0}.", sql);
                }


            }
            catch (FormatException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outScmProviderInfoSearch Search" + ex.Message);
            }
            catch (ArgumentNullException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
            }
            catch (ArrayTypeMismatchException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
            }
            catch (BadImageFormatException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
            }
            catch (IndexOutOfRangeException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
            }
            catch (NullReferenceException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
            }
            catch (TimeoutException ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
            }
            catch (Exception ex)
            {
                CTrace.WriteLine(CTrace.TraceLevel.Fail, "in outProductDetInfoSearch Search" + ex.Message);
                throw;
            }

            return localOrderInfo;
        }