ulysseskao
2016-05-03 bd2c873a725ed9b9909f04b66378be83665d9032
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
{
    public class AddrContrast
    {
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 
        public const string DefaultDept = "市區巡修課";
 
        public static AddrContrast Instance { get; } = new AddrContrast();
 
        private Dictionary<string, List<ADDRCONTRAST>> _totalAddrData = null;
 
        private AddrContrast()
        {
        }
 
        public void Initialize(OracleConnection conn)
        {
 
            if (_totalAddrData != null)
                return;
 
            _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, conn);
                reader = command.ExecuteReader();
 
                List<ADDRCONTRAST> addrcontrasts = new List<ADDRCONTRAST>();
                string tmp = "";
 
                while (reader.Read())
                {
                    ArrayList mRecord = new ArrayList();
                    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(item.CITY))
                    {
                        addrcontrasts.Add(item);
                    }
                    else
                    {
                        _totalAddrData.Add(tmp, addrcontrasts);
                        tmp = item.CITY;
                        addrcontrasts = new List<ADDRCONTRAST> { item };
                    }
                }
                _totalAddrData.Add(tmp, addrcontrasts);
            }
            catch (Exception e)
            {
                Logger.Warn(e, e.Message);
                _totalAddrData = null;
            }
            finally
            {
                reader?.Close();
                command?.Dispose();
            }
        }
 
        public int FindDeptId(string city, string region, string road)
        {
            var addrcontrasts = _totalAddrData[city];
 
            try
            {
                foreach (ADDRCONTRAST tmp in addrcontrasts)
                {
                    if (region.Trim().Equals(tmp.TOWN) && road.Trim().Equals(tmp.ROAD))
                    {
                        return tmp.DEPTID;
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Warn(e , e.Message);
                Logger.Warn("無法取得所屬巡修部門代號,預設案件所屬巡修部門為市區巡修課!");
            }
            // 當找不到部門別時,Default 設定為市巡
            var dept = GlobalVariable.EosCodelist.GetKeyId(GlobalVariable.Dept, DefaultDept);
            return dept;
        }
    }
}