移动系统liao
2024-06-13 80aa425c4ca51f7c0224a6245968cdd08940321b
CoreCms.Net.Services/baifenbingfa/BfbfComAPIService.cs
@@ -4,6 +4,8 @@
using CoreCms.Net.IServices.baifenbingfa;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Utility.Helper;
using Nest;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -32,7 +34,7 @@
           var ListData= await  _unitOfWork.GetDbClient().Queryable<CoreCmsUser>().Where(x => x.isDelete == false).Select(x => new SearchUserData
            {
                Id = x.id,
                name = x.mobile + "|" + x.userName + "|" + x.nickName,
                name = x.mobile /*+ "|" + x.userName*/ + "|" + x.nickName,
            }).WithCache(50).ToListAsync();
            if (string.IsNullOrEmpty(s))
@@ -58,5 +60,101 @@
            return false;
        }
        public async Task<List<CoreCmsGoodsCategory>> GetGoodsCategory()
        {
         return await   _unitOfWork.GetDbClient().Queryable<CoreCmsGoodsCategory>().Where(x=>x.isShow==true).WithCache(10).ToTreeAsync(x=>x.children, x=>x.parentId,0);
        }
        public  decimal CommandCustomizable(int count)
        {
            if (count > 9999)
                return 0;
            return count * 1;
        }
        public List<DistributorSort> orderedDistributors(List<DistributorSort> DataList, string latitude, string longitude)
        {
            GeoCoordinate inputLocation = new GeoCoordinate(double.Parse(longitude), double.Parse(latitude)); // 输入的经纬度
            var sortedDistributors = DataList.OrderBy(d => CalculateDistance(inputLocation, new GeoCoordinate(double.Parse(d.longitude), double.Parse(d.latitude))))
                                                 .ToList();
            return sortedDistributors;
        }
        /// <summary>
        /// 计算经纬达距离
        /// </summary>
        /// <param name="location1"></param>
        /// <param name="location2"></param>
        /// <returns></returns>
        private static double CalculateDistance(GeoCoordinate location1, GeoCoordinate location2)
        {
            const double earthRadiusKm = 6371;
            var dLat = ToRadians(location2.Latitude - location1.Latitude);
            var dLon = ToRadians(location2.Longitude - location1.Longitude);
            var a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
                    Math.Cos(ToRadians(location1.Latitude)) * Math.Cos(ToRadians(location2.Latitude)) *
                    Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
            var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
            var distance = earthRadiusKm * c;
            return distance;
        }
        private static double ToRadians(double degree)
        {
            return degree * Math.PI / 180;
        }
        /// <summary>
        /// 获取有效校园代理
        /// </summary>
        /// <param name="PIds"></param>
        /// <returns></returns>
        public async Task< List<DistributorSort>> GetDistributorsList(List<int> PIds)
        {
          var blist=  await  _unitOfWork.GetDbClient().Queryable<CoreCmsDistribution>().Where(x=>x.profession=="校园代理"&&x.verifyStatus== (int)GlobalEnumVars.DistributionVerifyStatus.VerifyYes).ToListAsync();
            List < DistributorSort > retlist=new List<DistributorSort>();
            foreach (var item in blist)
            {
                if (string.IsNullOrEmpty(item.storeCoordinate) || item.storeCoordinate == ",")
                    //没有定位,不加入
                    continue;
                var ldinate=   item.storeCoordinate.Split(',');
                retlist.Add(   new DistributorSort()
                {
                    id = item.id,
                    latitude = ldinate[0],
                    longitude = ldinate[1],
                    name = item.schoolName + ":" + item.name
                });
            }
            return retlist;
        }
        public async Task< List< int>> GetOderProductsIDs(string[] OderIds)
        {
          var list=   await  _unitOfWork.GetDbClient().Queryable<CoreCmsOrder>().Where(x => OderIds.Contains(x.orderId))
                .Select(x =>  new { items = SqlFunc.Subqueryable<CoreCmsOrderItem>().Where(it => it.orderId == x.orderId).ToList() }).ToListAsync();
            var li=new List<int>();
            foreach (var item in list)
            {
                li.AddRange(item.items.Select(x=>x.id).ToList());
            }
            return li;
        }
    }
}