using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using FrameworkDAL.DTO.BulkIce; using FrameworkDAL.Query.BulkIce; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; namespace FrameworkDAL.CustomCode.BulkIce { public class BulkIceDAL : IBulkIceDAL { private readonly IQueryExecutor _queryExecutor; public BulkIceDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetBulkIceData(int bulkIceId, LoginDTO loginDTO) { try { var sql = BulkIceQB.GET_BULKICE; var parameters = new { bulkiceid = bulkIceId }; var bulkIceDict = new Dictionary(); var result = await _queryExecutor.QueryMultiMapAsync( loginDTO, sql, (parent, child) => { if (!bulkIceDict.TryGetValue(parent.BulkIceId, out var existingParent)) { existingParent = parent; existingParent.BulkIceDetailArray = new List(); bulkIceDict[parent.BulkIceId] = existingParent; } if (child != null && child.BulkIceDetailId != 0) { existingParent.BulkIceDetailArray.Add(child); } return existingParent; }, parameters, splitOn: "BulkIceDetailId" ); var finalResult = bulkIceDict.Values.FirstOrDefault(); return JsonConvert.SerializeObject(finalResult); } catch (Exception ex) { throw new Exception($"Failed to retrieve BulkIce data: {ex.Message}", ex); } } public async Task GetSelectListBulkIce(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string Name = ""; if (CriteriaDTO != null && CriteriaDTO.SectionCriteriaList != null) { for (int i = 0; i < CriteriaDTO.SectionCriteriaList.Count; i++) { for (int j = 0; j < CriteriaDTO.SectionCriteriaList[i].AttributesCriteriaList.Count; j++) { if (CriteriaDTO.SectionCriteriaList[i].AttributesCriteriaList[j].FieldName.ToLower() == "bulkicename") { Name = Convert.ToString(CriteriaDTO.SectionCriteriaList[i].AttributesCriteriaList[j].FieldValue); } } } } string sql = BulkIceQB.GET_BULKICE_SELECTLIST; var parameters = new { firstnumber = FirstNumber, maxresult = MaxResult, bulkicename = Name }; var result = await _queryExecutor.QueryAsync(LoginDTO, sql, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } } }