using HotelPms.Data.Common.Util; using HotelPms.Share.Data; using HotelPms.Share.IO; using System.Data.Common; using System.Reflection; using System.Text; namespace HotelPms.Data.UseInfo { /// /// サーバー側の処理 /// ①データR/W /// ②クラウド中の計算 /// public partial class Use { private Dictionary personDict = new(); private Dictionary detailDict = new(); private Dictionary useRoomDict = new(); //DetailID,UseDate /// /// 利用情報の更新SQL生成 /// /// public string ToSql() { bool isNew = UpdateID == 0; UseSql useSql = new UseSql(isNew, ID); foreach (UsePerson person in PersonlList) { foreach(UsePersonFree personFree in person.FreeList) { useSql.UsePersonFree.AppendLine(personFree.AddSql()); } foreach (UsePersonTel personTel in person.TelList) { useSql.UsePersonTel.AppendLine(personTel.AddSql()); } useSql.UsePerson.AppendLine(person.AddSql()); } foreach (UseMemo useMemo in MemoList) { useSql.UseMemo.AppendLine(useMemo.AddSql()); } foreach (UseFree useFree in FreeList) { useSql.UseFree.AppendLine(useFree.AddSql()); } // 利用明細 foreach (UseDetail useDetail in DetailList) { foreach (UseMemo useMemo in useDetail.MemoList) { useSql.UseMemo.AppendLine(useMemo.AddSql()); } foreach (UseFree useFree in useDetail.FreeList) { useSql.UseFree.AppendLine(useFree.AddSql()); } foreach (Rental rental in useDetail.RentalList) { useSql.Rental.AppendLine(rental.AddSql()); } foreach (UseRoom useRoom in useDetail.UseRoomList) { foreach (UseFree useFree in useRoom.FreeList) { useSql.UseFree.AppendLine(useFree.AddSql()); } foreach (UseAllo useAllo in useRoom.UseAlloList) { useSql.UseAllo.AppendLine(useAllo.AddSql()); } foreach (Arrange arrange in useRoom.ArrangeList) { useSql.Arrange.AppendLine(arrange.AddSql()); } foreach (Sale sale in useRoom.SaleList) { useSql.Sale.AppendLine(sale.AddSql()); } foreach (Pay pay in useRoom.PayList) { useSql.Pay.AppendLine(pay.AddSql()); } useSql.UseRoom.AppendLine(useRoom.AddSql()); } useSql.UseDetail.AppendLine(useDetail.AddSql()); } //更新直前にカウントする UpdateID++; useSql.Use.AppendLine(isNew ? AddSql() : UpdateSql()); StringBuilder sql = new StringBuilder(); sql.Append(useSql.ToString()); sql.AppendLine($"EXECUTE SaveUseAfter {ID}"); return sql.ToString(); } /// /// 利用者情報 /// /// /// public void SetUsePerson(DbDataReader reader) { while (reader.Read()) { UsePerson item = new(); item.ConvertReader(reader); PersonlList.Add(item); personDict.Add(item.PersonID, item); } reader.NextResult(); } /// /// 個人自由集計 /// /// public void SetUsePersonFree(DbDataReader reader) { while (reader.Read()) { UsePersonFree item = new(); item.ConvertReader(reader); UsePerson person = personDict[item.PersonID]; person.FreeList.Add(item); } reader.NextResult(); } /// /// 個人電話 /// /// public void SetUsePersonTel(DbDataReader reader) { while (reader.Read()) { UsePersonTel item = new(); item.ConvertReader(reader); UsePerson person = personDict[item.PersonID]; person.TelList.Add(item); } reader.NextResult(); } /// /// 利用明細 /// /// /// public void SetUseDetail(DbDataReader reader) { while (reader.Read()) { UseDetail item = new(); item.ConvertReader(reader); DetailList.Add(item); detailDict.Add(item.DetailID, item); } reader.NextResult(); } /// /// 利用部屋 /// /// public void SetUseRoom(DbDataReader reader) { while (reader.Read()) { UseRoom item = new(); item.ConvertReader(reader); UseDetail detail = detailDict[item.DetailID]; detail.UseRoomList.Add(item); item.Parent = detail; useRoomDict.Add($"{item.DetailID},{item.UseDate.Value}", item); } reader.NextResult(); } /// /// 部屋割り /// /// public void SetUseAllo(DbDataReader reader) { while (reader.Read()) { UseAllo item = new(); item.ConvertReader(reader); UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"]; useRoom.UseAlloList.Add(item); item.Parent = useRoom; item.Detail = detailDict[item.DetailID]; item.Person = personDict[item.PersonID]; } reader.NextResult(); } /// /// 自由集計 /// /// /// public void SetUseFree(DbDataReader reader) { while (reader.Read()) { UseFree item = new(); item.ConvertReader(reader); if (item.DetailID == 0) { //利用情報の自由集計 FreeList.Add(item); item.Parent = this; } else if (item.UseDate.CompareTo(customTypes.Date.MinUseDate) <= 0) { //利用明細の自由集計 UseDetail detail = detailDict[item.DetailID]; detail.FreeList.Add(item); item.Parent = detail; } else { //利用部屋の自由集計 UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"]; useRoom.FreeList.Add(item); item.Parent = useRoom; } } reader.NextResult(); } /// /// メモ /// /// /// public void SetUseMemo(DbDataReader reader) { while (reader.Read()) { UseMemo item = new(); item.ConvertReader(reader); if (item.DetailID == 0) { //利用情報 MemoList.Add(item); item.Parent = this; } else { //利用明細 UseDetail detail = detailDict[item.DetailID]; detail.MemoList.Add(item); item.Parent = detail; } } reader.NextResult(); } /// /// 売上 /// /// public void SetSale(DbDataReader reader) { while (reader.Read()) { Sale item = new(); item.ConvertReader(reader); UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"]; useRoom.SaleList.Add(item); item.Parent = useRoom; } reader.NextResult(); } /// /// 入金 /// /// public void SetPay(DbDataReader reader) { while (reader.Read()) { Pay item = new(); item.ConvertReader(reader); UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"]; useRoom.PayList.Add(item); item.Parent = useRoom; } reader.NextResult(); } /// /// 手配情報 /// /// public void SetArrange(DbDataReader reader) { while (reader.Read()) { Arrange item = new(); item.ConvertReader(reader); UseRoom useRoom = useRoomDict[$"{item.DetailID},{item.UseDate.Value}"]; useRoom.ArrangeList.Add(item); item.Parent = useRoom; } reader.NextResult(); } /// /// 備品情報 /// /// public void SetRental(DbDataReader reader) { while (reader.Read()) { Rental item = new(); item.ConvertReader(reader); UseDetail detail = detailDict[item.DetailID]; detail.RentalList.Add(item); item.Parent = detail; } reader.NextResult(); } /// /// バッファークリア /// public void ClearDict() { personDict.Clear(); detailDict.Clear(); useRoomDict.Clear(); } /// /// 利用情報取得 /// ※サーバー中のバッファーより、マスタ名も取得する /// /// /// public static Use? Get(int id, DataAccess access) { try { string sql = $"EXECUTE GetUse {id}"; OperationLog.Instance.WriteLog($"データ読込:{sql}"); Use item = access.GetDataReader(sql, (reader, use) => { use.ClearDict(); if (reader.Read()) { use.ConvertReader(reader); reader.NextResult(); } //D_Use use.SetUsePerson(reader); //D_UsePerson use.SetUsePersonFree(reader); //D_UsePersonFree use.SetUsePersonTel(reader); //D_UsePersonTel use.SetUseDetail(reader); //D_UseDetail use.SetUseRoom(reader); //D_UseRoom use.SetUseAllo(reader); //D_UseAllo use.SetUseFree(reader); //D_UseFree use.SetUseMemo(reader); //D_UseMemo use.SetRental(reader); //D_Rental use.SetSale(reader); //D_Sale use.SetPay(reader); //D_Pay use.SetArrange(reader); //D_Arrange }); return item; } catch (Exception ex) { OperationLog.Instance.WriteLog($"{MethodInfo.GetCurrentMethod()}:{ex.Message}"); return null; } } } }