ulysseskao
2016-05-03 410dc2d04dbecf019129cd8cd65a3be2c62b4d0c
CCSTrace/CCS/Object/Addr_Contrast.cs
@@ -1,7 +1,9 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.OracleClient;
using CCSTrace.TPower.DMMS.Model.CCS;
using NLog;
namespace CCSTrace.CCS.Object
@@ -10,79 +12,85 @@
    {
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
        public static Hashtable MTotalData = null;
        public static string DefaultDept = "市區巡修課";
        private OracleConnection _connectionTpc;
        public const string DefaultDept = "市區巡修課";
        public AddrContrast(OracleConnection conn, OracleTransaction trx)
        public static AddrContrast Instance { get; } = new AddrContrast();
        private Dictionary<string, List<ADDRCONTRAST>> totalAddrData = null;
        private AddrContrast()
        {
            _connectionTpc = conn;
        }
            ArrayList mData = new ArrayList();
            string tmp = "";
        public void initialize(OracleConnection conn)
        {
            if (MTotalData != null)
            if (totalAddrData != null)
                return;
            MTotalData = new Hashtable();
            totalAddrData = new Dictionary<string, List<ADDRCONTRAST>>();
            var sqlStmt = "SELECT DEPTID,CITY,TOWN,ROAD FROM CCS.ADDR_CONTRAST ORDER BY CITY,TOWN,ROAD";
            OracleCommand command = null;
            OracleDataReader reader = null;
            try
            {
                command = new OracleCommand(sqlStmt, _connectionTpc, trx);
                command = new OracleCommand(sqlStmt, conn);
                reader = command.ExecuteReader();
                List<ADDRCONTRAST> addrcontrasts = new List<ADDRCONTRAST>();
                string tmp = "";
                while (reader.Read())
                {
                    ArrayList mRecord = new ArrayList();
                    var city = reader["CITY"].ToString();
                    mRecord.Add(city);
                    mRecord.Add(reader["TOWN"].ToString());
                    mRecord.Add(reader["ROAD"].ToString());
                    mRecord.Add(Convert.ToInt32(reader["DEPTID"].ToString()));
                    ADDRCONTRAST item = new ADDRCONTRAST
                    {
                        CITY = reader["CITY"].ToString(),
                        TOWN = reader["TOWN"].ToString(),
                        ROAD = reader["ROAD"].ToString(),
                        DEPTID = Convert.ToInt32(reader["DEPTID"].ToString())
                    };
                    if (tmp.Equals(city))
                        mData.Add(mRecord);
                    if (tmp.Equals(item.CITY))
                    {
                        addrcontrasts.Add(item);
                    }
                    else
                    {
                        MTotalData.Add(tmp, mData);
                        tmp = city;
                        mData = new ArrayList();
                        mData.Add(mRecord);
                        totalAddrData.Add(tmp, addrcontrasts);
                        tmp = item.CITY;
                        addrcontrasts = new List<ADDRCONTRAST> { item };
                    }
                }
                MTotalData.Add(tmp, mData);
                totalAddrData.Add(tmp, addrcontrasts);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
                MTotalData = null;
                Logger.Warn(e, e.Message);
                totalAddrData = null;
            }
            finally
            {
                reader.Close();
                command.Dispose();
                reader?.Close();
                command?.Dispose();
            }
        }
        public int FindDeptId(string city, string region, string road)
        {
            int dept = 0;
            ArrayList mData = (ArrayList)MTotalData[city];
            var addrcontrasts = totalAddrData[city];
            try
            {
                for (int i = 0; i < mData.Count; i++)
                foreach (ADDRCONTRAST tmp in addrcontrasts)
                {
                    ArrayList tmp = (ArrayList)mData[i];
                    string mRegion = tmp[1].ToString().Trim();
                    string mRoad = tmp[2].ToString().Trim();
                    int deptId = Convert.ToInt32(tmp[3].ToString());
                    if ((region.Trim().Equals(mRegion)) && (road.Trim().Equals(mRoad)))
                        return deptId;
                    if (region.Trim().Equals(tmp.TOWN) && road.Trim().Equals(tmp.ROAD))
                    {
                        return tmp.DEPTID;
                    }
                }
            }
            catch (Exception e)
@@ -91,7 +99,7 @@
                Logger.Warn("無法取得所屬巡修部門代號,預設案件所屬巡修部門為市區巡修課!");
            }
            // 當找不到部門別時,Default 設定為市巡
            dept = GlobalVariable.EosCodelist.GetKeyId(GlobalVariable.Dept, DefaultDept);
            var dept = GlobalVariable.EosCodelist.GetKeyId(GlobalVariable.Dept, DefaultDept);
            return dept;
        }
    }