Przeglądaj źródła

匹配op行程单
1、基础数据响应速度调优
2、列表数据后台缓存 分页
3、销售额页面 调整安卓端 显示值问题

leiy 8 miesięcy temu
rodzic
commit
066e082b41

+ 170 - 183
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -12114,7 +12114,7 @@ ORDER by  gctggrc.id DESC
         #region 下载匹配op行程单
         /// <summary>
         /// 匹配op行程单
-        /// Init
+        /// Init 
         /// </summary>
         /// <param name="dto">团组列表请求dto</param>
         /// <returns></returns>
@@ -12138,6 +12138,7 @@ ORDER by  gctggrc.id DESC
             }
 
             var country = groupInfos.Select(it => it.VisitCountry).ToList();
+            var diids = groupInfos.Select(it => it.Id).ToList();
             List<string> countrys = new List<string>();
             foreach (var item in country)
             {
@@ -12157,48 +12158,22 @@ ORDER by  gctggrc.id DESC
                 }
             }
 
+            List<string> areaArray = new List<string>(); //GetGroupCityLine
 
-            List<dynamic> countryDatas = new List<dynamic>();
-            var countries1 = await _sqlSugar.Queryable<Sys_Countries>().Select(it => new { it.Id, Name = it.Name_CN }).ToListAsync();
-
-            List<dynamic> countries = new List<dynamic>();
-            foreach (var item in countrys)
-            {
-                var countryInfo = countries1.Find(it => it.Name.Contains(item));
-                if (countryInfo != null)
-                {
-                    countries.Add(countryInfo);
-                }
-            }
-
-            var teamNames = groupInfos.Select(it => it.TeamName).ToList();
-
-            for (int i = 0; i < teamNames.Count; i++)
+            foreach (var item in diids)
             {
-                string item = teamNames[i];
-                if (string.IsNullOrEmpty(item) || item.Contains("-"))
+                string areaStr = GeneralMethod.GetGroupCityLine(item, "-");
+                if (!string.IsNullOrEmpty(areaStr))
                 {
-                    teamNames.Remove(item);
-                    i--;
+                    string[] str1 = areaStr.Split("-");
+                    if (str1.Length > 0)
+                    {
+                        areaArray.AddRange(str1);
+                    }
                 }
             }
 
-            stopwatch.Stop();
-            return Ok(JsonView(true, $"操作成功,耗时{stopwatch.ElapsedMilliseconds} ms", new { countryDatas = countries, teamNameDatas = teamNames }));
-
-        }
-
-        /// <summary>
-        /// 匹配op行程单
-        /// Init 查询区域数据
-        /// </summary>
-        /// <param name="dto">团组列表请求dto</param>
-        /// <returns></returns>
-        [HttpPost]
-        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
-        public async Task<IActionResult> PostMateOpGroupCountryChangeData(MateOpGroupCountryChangeDataDto dto)
-        {
-            Stopwatch stopwatch = Stopwatch.StartNew(); // 创建并启动Stopwatch
+            if (areaArray.Count > 0) areaArray = areaArray.Distinct().ToList();
 
             List<Sys_Cities> cityDatas = new List<Sys_Cities>();
             string countriesDataStr = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("CityDatas");//string 取
@@ -12213,124 +12188,178 @@ ORDER by  gctggrc.id DESC
                 cityDatas = JsonConvert.DeserializeObject<List<Sys_Cities>>(countriesDataStr);
             }
 
+            List<Sys_Cities> existCitys = new List<Sys_Cities>();
+            var existCitys1 = cityDatas.Where(it => areaArray.Contains(it.Name_CN)).Select(it => new { id = it.Id, parentId = it.CountriesId, name = it.Name_CN }).ToList();
 
+            List<int> countriesIds = existCitys1.Select(it => it.parentId).ToList();
 
-            var provinceData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 1).ToList();
-            var citiesData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 2).ToList();
-            var countiesData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 3).ToList();
+            var countriesDatas = await _sqlSugar.Queryable<Sys_Countries>()
+                                                .Where(it => countriesIds.Contains(it.Id))
+                                                .Select(it => new { it.Id, Name = it.Name_CN })
+                                                .ToListAsync();
 
-            List<dynamic> childList = new List<dynamic>();
-            int parentId = dto.CountriesId;
-            if (provinceData.Count > 1)
+            //var countryDatas = countriesDatas.Select(it => new
+            //{
+            //    id = it.Id,
+            //    name = it.Name,
+            //    childList = existCitys.Where(it1 => it1.CountriesId == it.Id).Select(it1 => new { parentId = it1.CountriesId, id = it1.Id, name = it1.Name_CN }).ToList()
+            //}).ToList();
+
+            var teamNames = groupInfos.Select(it => it.TeamName).ToList();
+
+            for (int i = 0; i < teamNames.Count; i++)
             {
-                foreach (var item1 in provinceData)
+                string item = teamNames[i];
+                if (string.IsNullOrEmpty(item) || item.Contains("-"))
                 {
-                    List<dynamic> childList1 = new List<dynamic>();
-                    var citiesData1 = citiesData.Where(it => it.ParentId == item1.Id).ToList();
-                    foreach (var item2 in citiesData1)
-                    {
+                    teamNames.Remove(item);
+                    i--;
+                }
+            }
 
-                        List<dynamic> childList2 = new List<dynamic>();
+            stopwatch.Stop();
+            return Ok(JsonView(true, $"操作成功,耗时{stopwatch.ElapsedMilliseconds} ms", new { teamNames,countriesDatas, citiesDatas = existCitys1 }));
 
-                        var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();
-                        foreach (var item3 in countiesData1)
-                        {
-                            childList2.Add(new
-                            {
+        }
 
-                                id = item3.Id,
-                                parentId = item2.Id,
-                                level = "district",
-                                name = item3.Name_CN,
-                            });
-                        }
+        ///// <summary>
+        ///// 匹配op行程单
+        ///// Init 查询区域数据
+        ///// </summary>
+        ///// <param name="dto">团组列表请求dto</param>
+        ///// <returns></returns>
+        //[HttpPost]
+        //[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        //public async Task<IActionResult> PostMateOpGroupCountryChangeData(MateOpGroupCountryChangeDataDto dto)
+        //{
+        //    Stopwatch stopwatch = Stopwatch.StartNew(); // 创建并启动Stopwatch
 
-                        childList1.Add(new
-                        {
-                            id = item2.Id,
-                            parentId = item1.Id,
-                            level = "city",
-                            name = item2.Name_CN,
-                            childList = childList2
-                        });
+        //    List<Sys_Cities> cityDatas = new List<Sys_Cities>();
+        //    string countriesDataStr = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("CityDatas");//string 取
+        //    if (string.IsNullOrEmpty(countriesDataStr))
+        //    {
+        //        cityDatas = await _sqlSugar.Queryable<Sys_Cities>().Where(it => it.IsDel == 0).ToListAsync();
+        //        TimeSpan ts = DateTime.Now.AddHours(2).TimeOfDay; //设置redis 过期时间 2
+        //        await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("CountriesDatas", JsonConvert.SerializeObject(cityDatas), ts);//string 存
+        //    }
+        //    else
+        //    {
+        //        cityDatas = JsonConvert.DeserializeObject<List<Sys_Cities>>(countriesDataStr);
+        //    }
 
-                    }
 
-                    childList.Add(new
-                    {
-                        id = item1.Id,
-                        parentId = parentId,
-                        level = "province",
-                        name = item1.Name_CN,
-                        childList = childList1
-                    });
-                }
 
-                //城市
-                var citiesData2 = citiesData.Where(it => it.ParentId == 0).ToList();
-                foreach (var item2 in citiesData2)
-                {
-                    List<dynamic> childList22 = new List<dynamic>();
+        //    var provinceData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 1).ToList();
+        //    var citiesData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 2).ToList();
+        //    var countiesData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 3).ToList();
 
-                    var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();
-                    foreach (var item3 in countiesData1)
-                    {
-                        childList22.Add(new
-                        {
+        //    List<dynamic> childList = new List<dynamic>();
+        //    int parentId = dto.CountriesId;
+        //    if (provinceData.Count > 1)
+        //    {
+        //        foreach (var item1 in provinceData)
+        //        {
+        //            List<dynamic> childList1 = new List<dynamic>();
+        //            var citiesData1 = citiesData.Where(it => it.ParentId == item1.Id).ToList();
+        //            foreach (var item2 in citiesData1)
+        //            {
 
-                            id = item3.Id,
-                            parentId = item2.Id,
-                            level = "district",
-                            name = item3.Name_CN,
-                        });
-                    }
+        //                List<dynamic> childList2 = new List<dynamic>();
 
-                    childList.Add(new
-                    {
-                        id = item2.Id,
-                        parentId = parentId,
-                        level = "city",
-                        name = item2.Name_CN,
-                        childList = childList22
-                    });
-                }
-            }
-            else
-            {
-                foreach (var item2 in citiesData)
-                {
-                    string cname = item2.Name_CN;
-                    List<dynamic> childList1 = new List<dynamic>();
-                    var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();
-                    foreach (var item3 in countiesData1)
-                    {
-                        childList1.Add(new
-                        {
-                            Id = item3.Id,
-                            parentId = item2.Id,
-                            level = "district",
-                            name = item3.Name_CN
-                        });
-                    }
+        //                var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();
+        //                foreach (var item3 in countiesData1)
+        //                {
+        //                    childList2.Add(new
+        //                    {
 
-                    childList.Add(new
-                    {
-                        id = item2.Id,
-                        parentId = parentId,
-                        level = "city",
-                        name = item2.Name_CN,
-                        childList = childList1
-                    });
-                }
-            }
+        //                        id = item3.Id,
+        //                        parentId = item2.Id,
+        //                        level = "district",
+        //                        name = item3.Name_CN,
+        //                    });
+        //                }
 
-            stopwatch.Stop();
-            return Ok(JsonView(true, $"操作成功,耗时{stopwatch.ElapsedMilliseconds} ms", childList));
+        //                childList1.Add(new
+        //                {
+        //                    id = item2.Id,
+        //                    parentId = item1.Id,
+        //                    level = "city",
+        //                    name = item2.Name_CN,
+        //                    childList = childList2
+        //                });
 
-        }
+        //            }
 
+        //            childList.Add(new
+        //            {
+        //                id = item1.Id,
+        //                parentId = parentId,
+        //                level = "province",
+        //                name = item1.Name_CN,
+        //                childList = childList1
+        //            });
+        //        }
 
+        //        //城市
+        //        var citiesData2 = citiesData.Where(it => it.ParentId == 0).ToList();
+        //        foreach (var item2 in citiesData2)
+        //        {
+        //            List<dynamic> childList22 = new List<dynamic>();
 
+        //            var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();
+        //            foreach (var item3 in countiesData1)
+        //            {
+        //                childList22.Add(new
+        //                {
+
+        //                    id = item3.Id,
+        //                    parentId = item2.Id,
+        //                    level = "district",
+        //                    name = item3.Name_CN,
+        //                });
+        //            }
+
+        //            childList.Add(new
+        //            {
+        //                id = item2.Id,
+        //                parentId = parentId,
+        //                level = "city",
+        //                name = item2.Name_CN,
+        //                childList = childList22
+        //            });
+        //        }
+        //    }
+        //    else
+        //    {
+        //        foreach (var item2 in citiesData)
+        //        {
+        //            string cname = item2.Name_CN;
+        //            List<dynamic> childList1 = new List<dynamic>();
+        //            var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();
+        //            foreach (var item3 in countiesData1)
+        //            {
+        //                childList1.Add(new
+        //                {
+        //                    Id = item3.Id,
+        //                    parentId = item2.Id,
+        //                    level = "district",
+        //                    name = item3.Name_CN
+        //                });
+        //            }
+
+        //            childList.Add(new
+        //            {
+        //                id = item2.Id,
+        //                parentId = parentId,
+        //                level = "city",
+        //                name = item2.Name_CN,
+        //                childList = childList1
+        //            });
+        //        }
+        //    }
+        //    stopwatch.Stop();
+        //    return Ok(JsonView(true, $"操作成功,耗时{stopwatch.ElapsedMilliseconds} ms", childList));
+        //}
 
         /// <summary>
         /// 匹配op行程单
@@ -12357,67 +12386,25 @@ ORDER by  gctggrc.id DESC
             #endregion
             if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) // web/Android
             {
+                var _view = await GeneralMethod.MateOpGroupPageListRedis();
                 string sqlWhere = "";
 
                 if (!string.IsNullOrEmpty(dto.Country))
                 {
-                    sqlWhere += string.Format(@$" And di.VisitCountry Like '%{dto.Country}%'");
+                    _view = _view.Where(x => x.VisitCountry != null && x.VisitCountry.Contains(dto.Country)).ToList();
                 }
 
-                //TODO: Area 数据源不确定
-
-                if (!string.IsNullOrEmpty(dto.TeamName))
+                if (!string.IsNullOrEmpty(dto.Area))
                 {
-                    sqlWhere += string.Format(@$" And di.TeamName Like '%{dto.Country}%'");
+                    _view = _view.Where(x => x.RouteCity != null && x.RouteCity.Contains(dto.Area)).ToList();
                 }
 
-
-                string sql = string.Format(@$"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,
-                                             	TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,
-                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperatorId,
-                                             	JietuanOperator,IsSure,CreateTime
-                                             	From (
-                                             	Select row_number() over(order by gdi.CreateTime Desc) as Row_Number,
-                                             	gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,
-                                             	ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,
-                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId,
-                                             	su.CnName JietuanOperator,IsSure,gdi.CreateTime
-                                             	From  Grp_DelegationInfo gdi
-                                             	Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id 
-                                             	Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
-                                             	Left Join Sys_Users su On gdi.JietuanOperator = su.Id
-                                             	Where gdi.IsDel = 0 {sqlWhere}
-                                             ) temp");
-
-                RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
-                var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync
-
-                #region 处理所属部门
-                /*
-                 * 1.sq 和 gyy 等显示 市场部
-                 * 2.王鸽和主管及张总还有管理员号统一国交部
-                 * 2-1.  4	管理员 ,21	张海麟
-                 */
-                List<int> userIds = _DelegationList.Select(it => it.JietuanOperatorId).ToList();
-                List<int> userIds1 = new List<int>() { 4, 21 };
-                var UserDepDatas = _sqlSugar.Queryable<Sys_Users>()
-                                            .LeftJoin<Sys_Department>((u, d) => u.DepId == d.Id)
-                                            .Where(u => u.IsDel == 0 && userIds.Contains(u.Id))
-                                            .Select((u, d) => new { UserId = u.Id, DepName = userIds1.Contains(u.Id) ? "国交部" : d.DepName })
-                                            .ToList();
-
-                foreach (var item in _DelegationList)
+                if (!string.IsNullOrEmpty(dto.TeamName))
                 {
-                    item.Department = UserDepDatas.Find(it => item.JietuanOperatorId == it.UserId)?.DepName ?? "Unknown";
+                    _view = _view.Where(x => x.TeamName != null && x.TeamName.Contains(dto.TeamName)).ToList();
                 }
-                #endregion
 
-                //var _view = new
-                //{
-                //    PageFuncAuth = pageFunAuthView,
-                //    Data = _DelegationList
-                //};
-                return Ok(JsonView(true, "查询成功!", _DelegationList, total));
+                return Ok(JsonView(true, "查询成功!", _view.Skip(dto.PageIndex).Take(dto.PageSize).ToList(), _view.Count));
             }
             else
             {

+ 1 - 1
OASystem/OASystem.Api/Controllers/StatisticsController.cs

@@ -2372,7 +2372,7 @@ FROM
         {
             public string thisYearSales { get; set; }
             public string lastYearSales { get; set; }
-            public string yoy { get; set; }
+            public string yoy { get; set; } = "1.00";
         }
 
 

+ 1 - 1
OASystem/OASystem.Api/Middlewares/ExceptionHandlingMiddleware.cs

@@ -50,7 +50,7 @@ namespace OASystem.API.Middlewares
             var response = context.Response;
             var errorResponse = new JsonView
             {
-                Code = StatusCodes.Status400BadRequest,
+                Code = StatusCodes.Status500InternalServerError,
                 Data = ""
             };  // 自定义的异常错误信息类型
             switch (exception)

+ 60 - 0
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -2289,6 +2289,66 @@ namespace OASystem.API.OAMethodLib
             return city;
         }
 
+        /// <summary>
+        /// op行程单相关团组信息 含途径城市
+        /// </summary>
+        /// <returns></returns>
+        public static async Task< List<MateOpGroupPageListView>> MateOpGroupPageListRedis()
+        {
+            List<MateOpGroupPageListView> _views = new List<MateOpGroupPageListView>();
+            string viewStr = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("MateOpGroupPageList");//string 取
+            if (!string.IsNullOrEmpty(viewStr))
+            {
+                _views = JsonConvert.DeserializeObject<List<MateOpGroupPageListView>>(viewStr);
+            }
+            else
+            {
+                string sql = string.Format($@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,
+                                             	TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,
+                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperatorId,
+                                             	JietuanOperator,IsSure,CreateTime,VisitCountry
+                                             	From (
+                                             	Select row_number() over(order by gdi.CreateTime Desc) as Row_Number,
+                                             	gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,
+                                             	ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,
+                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId,
+                                             	su.CnName JietuanOperator,IsSure,gdi.CreateTime,gdi.VisitCountry
+                                             	From  Grp_DelegationInfo gdi
+                                             	Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id 
+                                             	Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id
+                                             	Left Join Sys_Users su On gdi.JietuanOperator = su.Id
+                                             	Where gdi.IsDel = 0 
+                                             ) temp");
+
+                _views = _dirRep._sqlSugar.SqlQueryable<MateOpGroupPageListView>(sql).ToList();
+
+                #region 处理所属部门
+                /*
+                 * 1.sq 和 gyy 等显示 市场部
+                 * 2.王鸽和主管及张总还有管理员号统一国交部
+                 * 2-1.  4	管理员 ,21	张海麟
+                 */
+                List<int> userIds = _views.Select(it => it.JietuanOperatorId).ToList();
+                List<int> userIds1 = new List<int>() { 4, 21 };
+                var UserDepDatas = _dirRep._sqlSugar.Queryable<Sys_Users>()
+                                          .LeftJoin<Sys_Department>((u, d) => u.DepId == d.Id)
+                                          .Where(u => u.IsDel == 0 && userIds.Contains(u.Id))
+                                          .Select((u, d) => new { UserId = u.Id, DepName = userIds1.Contains(u.Id) ? "国交部" : d.DepName })
+                                          .ToList();
+
+                #endregion
+
+                _views.ForEach(it => {
+                    it.RouteCity = GetGroupCityLine(it.Id, @"/");
+                    it.Department = UserDepDatas.Find(it1 => it.JietuanOperatorId == it1.UserId)?.DepName ?? "Unknown";
+                });
+                TimeSpan ts = DateTime.Now.AddHours(2).TimeOfDay;
+                await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("MateOpGroupPageList", JsonConvert.SerializeObject(_views), ts);//string 存
+            }
+
+            return _views;
+        }
+
         /// <summary>
         /// 获取黑屏代码日期列表
         /// </summary>

+ 12 - 1
OASystem/OASystem.Domain/ViewModels/Groups/DelegationInfoView.cs

@@ -422,7 +422,7 @@ namespace OASystem.Domain.ViewModels.Groups
         /// <summary>
         /// 团组名称
         /// </summary>
-        public string? TeamName { get; set; }
+        public string TeamName { get; set; }
 
         /// <summary>
         /// 客户名称
@@ -560,4 +560,15 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public string CerdNo { get; set; }
     }
+
+
+    public class MateOpGroupPageListView : DelegationListView
+    {
+        public int Row_Number { get; set; }
+
+        public string VisitCountry { get; set; }
+
+        public string RouteCity { get; set; }
+
+    }
 }