Browse Source

酒店资料 优化查询速度(更改接口为分页,减少返回字段)

leiy 11 months ago
parent
commit
87e8fe047e

+ 57 - 15
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -649,7 +649,7 @@ namespace OASystem.API.Controllers
 
         #region 酒店资料数据
         /// <summary>
-        /// 酒店信息查询
+        /// 酒店信息查询 Page
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
@@ -657,25 +657,67 @@ namespace OASystem.API.Controllers
         [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
         public async Task<IActionResult> QueryHotelData(QueryHotelDataDto dto)
         {
-            try
+            string sqlWhere = string.Empty;
+            if (!string.IsNullOrWhiteSpace(dto.Name))
+            {
+                sqlWhere += string.Format(@" And hd.Name like '%{0}%'", dto.Name);
+            }
+            if (!string.IsNullOrWhiteSpace(dto.City) && dto.City != "全部")
             {
+                sqlWhere += string.Format(@" And hd.City like '%{0}%'", dto.City);
+            }
+            if (!string.IsNullOrWhiteSpace(dto.Contact))
+            {
+                sqlWhere += string.Format(@" And hd.Contact like '%{0}%'", dto.Contact);
+            }
+            if (!string.IsNullOrWhiteSpace(dto.ContactPhone))
+            {
+                sqlWhere += string.Format(@" And hd.ContactPhone like '%{0}%'", dto.ContactPhone);
+            }
+            sqlWhere += string.Format(@" And hd.IsDel={0}", 0);
+            if (!string.IsNullOrEmpty(sqlWhere.Trim()))
+            {
+                Regex r = new Regex("And");
+                sqlWhere = r.Replace(sqlWhere, "Where", 1);
+            }
 
-                Result hotelData = await _hotelDataRep.QueryHotelData(dto);
-                if (hotelData.Code == 0)
-                {
-                    return Ok(JsonView(true, "查询成功", hotelData.Data));
-                }
-                else
-                {
-                    return Ok(JsonView(false, hotelData.Msg));
-                }
+            string sql = string.Format(@"SELECT
+                                           *
+                                         FROM
+                                           (
+                                             SELECT
+                                               ROW_NUMBER() OVER (
+                                                 ORDER BY
+                                                   hd.CreateTime DESC
+                                               ) AS Row_Number,
+                                               hd.Id,
+                                               hd.City,
+                                               hd.[Name],
+                                               hd.Tel,
+                                               hd.Fax,
+                                               hd.Contact,
+                                               hd.ContactPhone,
+                                               u.CnName AS CreateUserName,
+                                               hd.CreateTime
+                                             FROM
+                                               Res_HotelData hd
+                                             WITH
+                                               (NoLock)
+                                               LEFT JOIN Sys_Users u
+                                             WITH
+                                               (NoLock) ON hd.CreateUserId = u.Id {0} 
+                                           ) Temp
+                                         ", sqlWhere);
 
-            }
-            catch (Exception ex)
+            if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3)
             {
-                return Ok(JsonView(false, "程序错误!"));
-                throw;
+                RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
+                var data = await _sqlSugar.SqlQueryable<HotelDataItemView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total); //ToPageAsync
+
+                return Ok(JsonView(true, "操作成功", data,total));
+
             }
+            else return Ok(JsonView(false, "请传入PortType参数!1:Web,2:Android,3:IOS"));
 
 
         }

+ 23 - 0
OASystem/OASystem.Domain/ViewModels/Resource/HotelDataView.cs

@@ -21,4 +21,27 @@ namespace OASystem.Domain.ViewModels.Resource
         public string City { get; set; }
     }
 
+    public class HotelDataItemView
+    {
+        public int Row_Number { get; set; }
+
+        public int Id { get; set; }
+
+        public string City { get; set; }
+
+        public string Name { get; set; }
+
+        public string Tel { get; set; }
+
+        public string Fax { get; set; }
+
+        public string Contact { get; set; }
+
+        public string CreateUserName { get; set; }
+
+        public string ContactPhone { get; set; }
+
+        public DateTime CreateTime { get; set; }
+    }
+
 }

+ 1 - 135
OASystem/OASystem.Infrastructure/Repositories/Resource/HotelDataRepository.cs

@@ -3,6 +3,7 @@ using OASystem.Domain;
 using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Dtos.Resource;
 using OASystem.Domain.Entities.Resource;
+using OASystem.Domain.ViewModels.Groups;
 using OASystem.Domain.ViewModels.Resource;
 using System;
 using System.Collections.Generic;
@@ -71,140 +72,5 @@ namespace OASystem.Infrastructure.Repositories.Resource
                 return result = new Result() { Code = -1, Msg = "请传入Status参数,1添加 2修改!" };
             }
         }
-
-        public async Task<Result> QueryHotelData(QueryHotelDataDto dto)
-        {
-            Result result = new Result() { Code = -2, Msg = "未知错误" };
-            try
-            {
-                string sqlWhere = string.Empty;
-                if (!string.IsNullOrWhiteSpace(dto.Name))
-                {
-                    sqlWhere += string.Format(@" And Name like '%{0}%'", dto.Name);
-                }
-                if (!string.IsNullOrWhiteSpace(dto.City) && dto.City != "全部")
-                {
-                    sqlWhere += string.Format(@" And City like '%{0}%'", dto.City);
-                }
-                if (!string.IsNullOrWhiteSpace(dto.Contact))
-                {
-                    sqlWhere += string.Format(@" And Contact like '%{0}%'", dto.Contact);
-                }
-                if (!string.IsNullOrWhiteSpace(dto.ContactPhone))
-                {
-                    sqlWhere += string.Format(@" And ContactPhone like '%{0}%'", dto.ContactPhone);
-                }
-                sqlWhere += string.Format(@" And IsDel={0}", 0);
-                if (!string.IsNullOrEmpty(sqlWhere.Trim()))
-                {
-                    Regex r = new Regex("And");
-                    sqlWhere = r.Replace(sqlWhere, "Where", 1);
-                }
-                if (dto.PortType == 1)
-                {
-                    string sql = string.Format(@"select * from Res_HotelData {0}", sqlWhere);
-                    List<Res_HotelData> HotelDataData = await _sqlSugar.SqlQueryable<Res_HotelData>(sql).ToListAsync();
-                    if (HotelDataData.Count == 0)
-                    {
-                        return result = new Result() { Code = -1, Msg = "暂无数据" };
-                    }
-                    HotelDataData = HotelDataData.OrderByDescending(x => x.CreateTime).ToList();
-
-                    if (dto.PageSize == 0 && dto.PageIndex == 0)
-                    {
-                        return result = new Result()
-                        {
-                            Code = 0,
-                            Msg = "查询成功",
-                            Data = HotelDataData,
-                        };
-                    }
-                    else
-                    {
-                        int count = HotelDataData.Count;
-                        float totalPage = (float)count / dto.PageSize;//总页数
-                        if (totalPage == 0) totalPage = 1;
-                        else totalPage = (int)Math.Ceiling((double)totalPage);
-
-                        List<Res_HotelData> _HotelData = new List<Res_HotelData>();
-                        for (int i = 0; i < dto.PageSize; i++)
-                        {
-                            var RowIndex = i + (dto.PageIndex - 1) * dto.PageSize;
-                            if (RowIndex < HotelDataData.Count)
-                            {
-                                _HotelData.Add(HotelDataData[RowIndex]);
-                            }
-                            else
-                            {
-                                break;
-                            }
-                        }
-                        return result = new Result()
-                        {
-                            Code = 0,
-                            Msg = "查询成功",
-                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = _HotelData },
-                        };
-                    }
-
-                }
-                else if (dto.PortType == 2)
-                {
-                    string sql = string.Format(@"select * from Res_HotelData {0}", sqlWhere);
-                    List<Res_HotelData> HotelDataData = await _sqlSugar.SqlQueryable<Res_HotelData>(sql).ToListAsync();
-                    if (HotelDataData.Count == 0)
-                    {
-                        return result = new Result() { Code = -1, Msg = "暂无数据" };
-                    }
-                    HotelDataData = HotelDataData.OrderByDescending(x => x.CreateTime).ToList();
-
-                    if (dto.PageSize == 0 && dto.PageIndex == 0)
-                    {
-                        return result = new Result()
-                        {
-                            Code = 0,
-                            Msg = "查询成功",
-                            Data = HotelDataData,
-                        };
-                    }
-                    else
-                    {
-                        int count = HotelDataData.Count;
-                        float totalPage = (float)count / dto.PageSize;//总页数
-                        if (totalPage == 0) totalPage = 1;
-                        else totalPage = (int)Math.Ceiling((double)totalPage);
-
-                        List<Res_HotelData> _HotelData = new List<Res_HotelData>();
-                        for (int i = 0; i < dto.PageSize; i++)
-                        {
-                            var RowIndex = i + (dto.PageIndex - 1) * dto.PageSize;
-                            if (RowIndex < HotelDataData.Count)
-                            {
-                                _HotelData.Add(HotelDataData[RowIndex]);
-                            }
-                            else
-                            {
-                                break;
-                            }
-                        }
-                        return result = new Result()
-                        {
-                            Code = 0,
-                            Msg = "查询成功",
-                            Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = _HotelData },
-                        };
-                    }
-                }
-                else
-                {
-                    return result = new Result() { Code = -2, Msg = "请传入PortType参数!1:Web,2:Android,3:IOS" };
-                }
-            }
-            catch (Exception)
-            {
-                return result;
-                throw;
-            }
-        }
     }
 }