Newer
Older
IRIS_COLLECT / IOM_cs / irisDb / service / sqliteImpl / PersonService_SqliteImpl.cs
yangqianqian on 29 Dec 2020 26 KB first
using IOM_cs.irisDb.model;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Windows.Forms;

namespace IOM_cs.irisDb.service.sqliteImpl
{
    public class PersonService_SqliteImpl:IPersonService
    {
        public int deleteAllData()
        {
            int iRetval = -1;
            try
            {
                //iris_data表
                string sQry = "delete from iris_data";               
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                iRetval = aCommand.ExecuteNonQuery();
                aCommand.Dispose();

                sQry = "update sqlite_sequence SET seq = 0 where name = 'iris_data'";//自增长ID为0";
                aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                iRetval = aCommand.ExecuteNonQuery();
                aCommand.Dispose();
                
                //sys_perosn
                sQry = "delete from sys_person";
                aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                iRetval = aCommand.ExecuteNonQuery();
                aCommand.Dispose();

                sQry = "update sqlite_sequence SET seq = 0 where name = 'sys_person'";//自增长ID为0";
                aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                iRetval = aCommand.ExecuteNonQuery();
                aCommand.Dispose();               

                iRetval = 0;
            }
            catch(Exception ex)
            {
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("EXCEPTION: " + ex.Message);
                iRetval = -1;
            }

            return iRetval;
        }

        #region person
        /// <summary>
        /// 获取数据库中的注册人员总数
        /// </summary>
        /// <returns></returns>
        public int GetCountOfPerson()
        {
            int count = 0;
            try
            {
                SQLiteDataReader aReader = null;

                string sQry = "SELECT COUNT(*) FROM sys_person";
                SQLiteCommand cmd = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aReader = cmd.ExecuteReader(CommandBehavior.Default);

                if (aReader.Read())
                {
                    count = aReader.GetInt32(0);
                }
                aReader.Close();
            }
            catch (SqlException s)
            { MessageBox.Show(s.Message.ToString()); }

            return count;

        }


        /// <summary>
        /// 判断此证件号码是否已存在
        /// </summary>
        public int IsIdCardNoPresent(string idCardNo)
        {
            //加密
            //sIDCardNo = CryptoHelper.Encrypt(sIDCardNo);
            int mun = 0;
            try
            {
                string sQry = "SELECT COUNT(*) FROM sys_person WHERE ID_CARD_NO=@staffNo";
                SQLiteCommand cmd = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                cmd.Parameters.Add
                    (
                    "@staffNo",
                   DbType.AnsiString,
                    100
                    ).Value = idCardNo.Trim();
                SQLiteDataReader aReader = cmd.ExecuteReader(CommandBehavior.Default);

                if (aReader.Read())
                {
                    if (!aReader.IsDBNull(0)) mun = aReader.GetInt16(0);
                }
                aReader.Close();
                cmd.Dispose();
            }
            catch (SQLiteException e)
            {
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");

                }
                MessageBox.Show("IsIDCardNoPresentException:" + e.Message);
            }
            return mun;

        }

        /// <summary>
        /// 判断此员工编号是否已存在
        /// </summary>
        public int IsStaffNoPresent(string staffNo)
        {
            //加密
            //sIDCardNo = CryptoHelper.Encrypt(sIDCardNo);
            int mun = 0;
            try
            {
                string sQry = "SELECT COUNT(*) FROM sys_person WHERE STAFF_NO=@staffNo";
                SQLiteCommand cmd = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                cmd.Parameters.Add
                    (
                    "@staffNo",
                   DbType.AnsiString,
                    100
                    ).Value = staffNo.Trim();
                SQLiteDataReader aReader = cmd.ExecuteReader(CommandBehavior.Default);

                if (aReader.Read())
                {
                    if (!aReader.IsDBNull(0)) mun = aReader.GetInt16(0);
                }
                aReader.Close();
                cmd.Dispose();
            }
            catch (SQLiteException e)
            {
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");

                }
                MessageBox.Show("IsIDCardNoPresentException:" + e.Message);
            }
            return mun;

        }

        /// <summary>
        /// sys_person,sys_person_ext新增人员
        /// </summary>
        public int AddPerson(Person person)
        {
            int re = -1;
            SQLiteTransaction tx = null;
            try
            {
                //sIDCardNo = CryptoHelper.Encrypt(sIDCardNo);//加密

                tx = _SqliteHelper.sqliteConnection.BeginTransaction();


                string sQry =
                    "INSERT INTO sys_person (ID,CREATETIME,UPDATETIME,NAME,SEX,DEPTID,ID_CARD_NO,REMARKS,NATION,BIRTHDAY,PHOTO_DATA,STAFF_NO,ADDR,COLL_TYPE,CER_AUTH,COLL_TIME)" +
                                    "values (@var0,@var1,@var2,@var3,@var4,@var5,@var6, @var7, @var8, @var9, @var10, @var11, @var12, @var13, @var14, @var15)";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);


                aCommand.Transaction = tx; //绑定事务             

                aCommand.Parameters.Add(new SQLiteParameter("@var0", DbType.Int64));
                aCommand.Parameters.Add(new SQLiteParameter("@var1", DbType.DateTime));
                aCommand.Parameters.Add(new SQLiteParameter("@var2", DbType.DateTime));
                aCommand.Parameters.Add(new SQLiteParameter("@var3", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var4", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var5", DbType.Int64));
                aCommand.Parameters.Add(new SQLiteParameter("@var6", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var7", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var8", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var9", DbType.Date));
                aCommand.Parameters.Add(new SQLiteParameter("@var10", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var11", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var12", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var13", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var14", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var15", DbType.DateTime));

                aCommand.Parameters[0].Value = person.id;
                aCommand.Parameters[1].Value = DateTime.Now;
                aCommand.Parameters[2].Value = DateTime.Now;
                aCommand.Parameters[3].Value = person.name;
                aCommand.Parameters[4].Value = person.sex;
                aCommand.Parameters[5].Value = person.deptId;
                aCommand.Parameters[6].Value = person.idCardNo;
                aCommand.Parameters[7].Value = person.remarks;
                aCommand.Parameters[8].Value = person.nation;
                aCommand.Parameters[9].Value = person.birthday;
                aCommand.Parameters[10].Value = person.photoData;
                aCommand.Parameters[11].Value = person.staffNo;
                aCommand.Parameters[12].Value = person.addr; 
                aCommand.Parameters[13].Value = person.collType;
                aCommand.Parameters[14].Value = person.cerAuth;
                aCommand.Parameters[15].Value = DateTime.Now;

                aCommand.ExecuteNonQuery();
                tx.Commit();
                aCommand.Dispose();
                
                re = 0;

            }
            catch (SQLiteException ex)
            {
                tx.Rollback();
                re = -1;
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("AddPerson EXCEPTION: " + ex.Message);
            }
            finally
            {
                tx.Dispose();
            }
            return re;
        }
        /// <summary>
        /// 删除人员,sys_person、iris_data、iris_data_coll物理删除
        /// </summary>
        public int DeletePerson(Int64 personId)
        {
            int iRetval = -1;
            try
            {
                string sQry = "delete FROM sys_person WHERE ID=@Id";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aCommand.Parameters.AddWithValue("@Id", personId);


                iRetval = aCommand.ExecuteNonQuery();
                aCommand.Dispose();

                sQry = "DELETE FROM iris_data WHERE PERSON_ID=@Id";
                aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aCommand.Parameters.AddWithValue("@Id", personId);

                iRetval = aCommand.ExecuteNonQuery();
                aCommand.Dispose();
                
                iRetval = 0;

            }
            catch (Exception ex)
            {
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("EXCEPTION: " + ex.Message);
                iRetval = -1;
            }

            return iRetval;

        }
        /// <summary>
        /// 获取人员详情,返回Person,IrisData
        /// </summary>
        public int GetDetail(Int64 personId, ref Person person, ref IrisData irisData)
        {
            int iRetval = 0;
            try
            {
                // sys_person表
                string sQry = "SELECT * FROM sys_person WHERE ID=@Id";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aCommand.Parameters.AddWithValue("@Id", personId);

                SQLiteDataAdapter adapter = new SQLiteDataAdapter();
                adapter.SelectCommand = aCommand;
                DataTable dt = new DataTable();
                adapter.Fill(dt);

                if (dt != null && dt.Rows.Count != 0)
                {
                    person = ConvertToEntity<Person>(dt, dt.Rows[0]);
                }
                aCommand.Dispose();
                adapter.Dispose();

                
                // iris_data表
                sQry = "SELECT * FROM iris_data WHERE PERSON_ID=@Id";
                aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aCommand.Parameters.AddWithValue("@Id", personId);
                adapter = new SQLiteDataAdapter();
                adapter.SelectCommand = aCommand;
                dt = null;
                dt = new DataTable();
                adapter.Fill(dt);
                if (dt != null && dt.Rows.Count != 0)
                {
                    irisData = ConvertToEntity<IrisData>(dt, dt.Rows[0]);
                }
                aCommand.Dispose();
                adapter.Dispose();

            }
            catch (SqlException exSqlDb)
            {
                iRetval = exSqlDb.ErrorCode;
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("GetDetail EXCEPTION: " + exSqlDb.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show("GetDetail EXCEPTION: " + ex.Message);
            }

            return iRetval;
        }
        /// <summary>
        /// 保存编辑,更新sys_person表
        /// </summary>
        public int Update(Person person)
        {
            int iRetval = -1;
            try
            {
                // sys_person表
                string sQry = "UPDATE sys_person set STAFF_NO=@var0,NAME=@var1,SEX=@var2,ID_CARD_NO=@var3, REMARKS = @var4,NATION=@var5, CER_AUTH=@var6,ADDR=@var7,BIRTHDAY=@var8,DEPTID=@var9,UPDATETIME=@var10 WHERE ID=@Id";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                
                aCommand.Parameters.Add(new SQLiteParameter("@var0", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var1", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var2", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var3", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var4", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var5", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var6", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var7", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var8", DbType.Date));
                aCommand.Parameters.Add(new SQLiteParameter("@var9", DbType.Int64));
                aCommand.Parameters.Add(new SQLiteParameter("@var10", DbType.DateTime));
                aCommand.Parameters.Add(new SQLiteParameter("@Id", DbType.Int64));

                aCommand.Parameters[0].Value = person.staffNo;
                aCommand.Parameters[1].Value = person.name;
                aCommand.Parameters[2].Value = person.sex;
                aCommand.Parameters[3].Value = person.idCardNo;
                aCommand.Parameters[4].Value = person.remarks;
                aCommand.Parameters[5].Value = person.nation;
                aCommand.Parameters[6].Value = person.cerAuth;
                aCommand.Parameters[7].Value = person.addr;
                aCommand.Parameters[8].Value = person.birthday;
                aCommand.Parameters[9].Value = person.deptId;
                aCommand.Parameters[10].Value = DateTime.Now;
                aCommand.Parameters[11].Value = person.id;

                aCommand.ExecuteNonQuery();
                aCommand.Dispose();
                
                iRetval = 0;
            }
            catch (SqlException exSqlDb)
            {
                iRetval = exSqlDb.ErrorCode;
                iRetval = -1;
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("Update EXCEPTION: " + exSqlDb.Message);
            }
            catch (Exception ex)
            {
                iRetval = -1;
                MessageBox.Show("Update EXCEPTION: " + ex.Message);
            }

            return iRetval;
        }

        /// <summary>
        /// 更新数据上传状态
        /// </summary>
        public int UpdateFlagUpload(long id, string flagUpload)
        {
            int iRetval = -1;
            try
            {
                // sys_person表
                string sQry = "UPDATE sys_person set FLAG_UPLOAD=@var0 WHERE ID=@Id";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);

                aCommand.Parameters.Add(new SQLiteParameter("@var0", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@Id", DbType.Int64));

                aCommand.Parameters[0].Value = flagUpload;
                aCommand.Parameters[1].Value = id;

                aCommand.ExecuteNonQuery();
                aCommand.Dispose();

                iRetval = 0;
            }
            catch (SqlException exSqlDb)
            {
                iRetval = exSqlDb.ErrorCode;
                iRetval = -1;
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("Update EXCEPTION: " + exSqlDb.Message);
            }
            catch (Exception ex)
            {
                iRetval = -1;
                MessageBox.Show("Update EXCEPTION: " + ex.Message);
            }

            return iRetval;
        }

        public int deletePersonAndIrisById(long id)
        {
            int re = -1;
            try
            {
                // sys_person表
                string sQry = "delete from sys_person WHERE ID=@Id";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aCommand.Parameters.Add(new SQLiteParameter("@Id", DbType.Int64));
                aCommand.Parameters[0].Value = id;
                aCommand.ExecuteNonQuery();
                aCommand.Dispose();

                //iris_data
                sQry = "delete from iris_data WHERE PERSON_ID=@Id";
                aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                aCommand.Parameters.Clear();
                aCommand.Parameters.Add(new SQLiteParameter("@Id", DbType.Int64));
                aCommand.Parameters[0].Value = id;
                aCommand.ExecuteNonQuery();
                aCommand.Dispose();

                re = 0;
            }
            catch (SqlException exSqlDb)
            {
                re = -1;
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("deletePersonAndIrisById EXCEPTION: " + exSqlDb.Message);
            }
            catch (Exception ex)
            {
                re = -1;
                MessageBox.Show("deletePersonAndIrisById EXCEPTION: " + ex.Message);
            }


            return re;
        }

        #endregion

       

        #region iris_data


        public int GetAllIrisCode(ref DataTable ds)
        {
            int re = -1;

            try
            {
                string sQry = "SELECT ID,PERSON_ID, IRIS_L1, IRIS_L2, IRIS_R1, IRIS_R2 FROM iris_data";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);
                SQLiteDataAdapter aAdapter = new SQLiteDataAdapter();
                aAdapter.SelectCommand = aCommand;

                aAdapter.Fill(ds);

                aAdapter.Dispose();
                 
                re = 0;
            }           
            catch (Exception ex)
            {
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!" + "EXCEPTION: " + ex.Message);
                    return -1;
                }                
            }


            return re;
        }

        /// <summary>
        /// iris_data新增虹膜数据
        /// </summary>
        public int AddIrisData(IrisData irisData)
        {
            int re = -1;
            SQLiteTransaction tx = null;
            try
            {
                tx = _SqliteHelper.sqliteConnection.BeginTransaction();
                string sQry =
                    "INSERT INTO iris_data(ID,PERSON_ID,IRIS_L1,IRIS_R1,IRIS_L2,IRIS_R2,IMAGE_L1_DATA,IMAGE_R1_DATA,IMAGE_L2_DATA,IMAGE_R2_DATA,Q_L1,Q_R1,Q_L2,Q_R2)" +
                    "values(@var0,@var1,@var2,@var3,@var4,@var5,@var6, @var7, @var8, @var9, @var10, @var11, @var12, @var13)";
                SQLiteCommand aCommand = new SQLiteCommand(sQry, _SqliteHelper.sqliteConnection);

                //绑定事务
                aCommand.Transaction = tx;
                aCommand.Parameters.Add(new SQLiteParameter("@var0", DbType.Int64));
                aCommand.Parameters.Add(new SQLiteParameter("@var1", DbType.Int64));
                aCommand.Parameters.Add(new SQLiteParameter("@var2", DbType.Binary));
                aCommand.Parameters.Add(new SQLiteParameter("@var3", DbType.Binary));
                aCommand.Parameters.Add(new SQLiteParameter("@var4", DbType.Binary));
                aCommand.Parameters.Add(new SQLiteParameter("@var5", DbType.Binary));
                aCommand.Parameters.Add(new SQLiteParameter("@var6", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var7", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var8", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var9", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var10", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var11", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var12", DbType.String));
                aCommand.Parameters.Add(new SQLiteParameter("@var13", DbType.String));

                aCommand.Parameters[0].Value = irisData.id;
                aCommand.Parameters[1].Value = irisData.personId;
                aCommand.Parameters[2].Value = irisData.irisL1;
                aCommand.Parameters[3].Value = irisData.irisR1;
                aCommand.Parameters[4].Value = irisData.irisL2;
                aCommand.Parameters[5].Value = irisData.irisR2;
                aCommand.Parameters[6].Value = irisData.imageL1Data;
                aCommand.Parameters[7].Value = irisData.imageR1Data;
                aCommand.Parameters[8].Value = irisData.imageL2Data;
                aCommand.Parameters[9].Value = irisData.imageR2Data;
                aCommand.Parameters[10].Value = irisData.qL1;
                aCommand.Parameters[11].Value = irisData.qR1;
                aCommand.Parameters[12].Value = irisData.qL2;
                aCommand.Parameters[13].Value = irisData.qR2;

                aCommand.ExecuteNonQuery();
                tx.Commit();
                aCommand.Dispose();

                re = 0;
            }
            catch (Exception ex)
            {
                tx.Rollback();
                re = -1;
                if (_SqliteHelper.sqliteConnection.State == ConnectionState.Closed)
                {
                    MessageBox.Show("数据库连接断开,请重启软件!");
                    return -1;
                }
                MessageBox.Show("EXCEPTION: " + ex.Message);
            }
            finally
            {
                tx.Dispose();
            }

            return re;
        }
        #endregion

        /// <summary>
        /// DataTable转换为实体对象   
        /// </summary>
        private T ConvertToEntity<T>(DataTable dt, DataRow row) where T : new()
        {
            T t = new T();
            try
            {
                System.Data.DataColumnCollection columns = dt.Columns;
                int iColumnCount = columns.Count;
                int i;
                int j;

                Type elementType;
                elementType = t.GetType();
                System.Reflection.PropertyInfo[] publicProperties = elementType.GetProperties();
                //if (!(publicProperties.Length > iColumnCount))
                //{
                for (i = 0; i < iColumnCount; i++)
                {
                    for (j = 0; j < publicProperties.Length; j++)
                    {
                        if (columns[i].ColumnName.ToLower().Replace("_", "") == publicProperties[j].Name.ToLower().Replace("_", ""))
                        {
                            if (publicProperties[j].PropertyType == typeof(int))
                            {
                                int num = 0;
                                try
                                {
                                    num = Convert.ToInt32(row[i]);
                                }
                                catch
                                {
                                }
                                publicProperties[j].SetValue(t, num, null);
                            }
                            else
                                if (publicProperties[j].PropertyType == typeof(string) && row[i] == System.DBNull.Value)
                            {
                                publicProperties[j].SetValue(t, "", null);
                            }
                            else
                            {
                                object value = row[i] == System.DBNull.Value ? null : row[i];
                                publicProperties[j].SetValue(t, value, null);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            return t;
        }      

    }
}