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> totalAddrData = null; private AddrContrast() { } public void initialize(OracleConnection conn) { if (totalAddrData != null) return; totalAddrData = new Dictionary>(); 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 addrcontrasts = new List(); 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 { 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; } } }