/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.UI; using SqlSugar; namespace CoreCms.Net.Repository { /// /// 门店表 接口实现 /// public class CoreCmsStoreRepository : BaseRepository, ICoreCmsStoreRepository { public CoreCmsStoreRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { } /// /// 重写异步插入方法 /// /// 实体数据 /// public async Task InsertAsync(CoreCmsStore entity) { var jm = new AdminUiCallBack(); var isDefaultObj = await DbClient.Queryable().Where(p => p.isDefault == true).AnyAsync(); if (isDefaultObj && entity.isDefault == true) { await DbClient.Updateable().SetColumns(it => it.isDefault == false).Where(p => p.id > 0).ExecuteCommandAsync(); ; } else if (!isDefaultObj) { entity.isDefault = true; } entity.createTime = DateTime.Now; entity.updateTime = DateTime.Now; entity.distance = 0; if (entity.coordinate.Contains($",")) { var latlong = entity.coordinate.Split(","); entity.latitude = latlong[0]; entity.longitude = latlong[1]; } var id = await DbClient.Insertable(entity).ExecuteReturnIdentityAsync(); var bl = id > 0; jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.CreateSuccess : GlobalConstVars.CreateFailure; return jm; } /// /// 重写异步更新方法方法 /// /// /// public async Task UpdateAsync(CoreCmsStore entity) { var jm = new AdminUiCallBack(); var oldModel = await DbClient.Queryable().In(entity.id).SingleAsync(); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } //事务处理过程开始 oldModel.storeName = entity.storeName; oldModel.mobile = entity.mobile; oldModel.linkMan = entity.linkMan; oldModel.logoImage = entity.logoImage; oldModel.areaId = entity.areaId; oldModel.address = entity.address; //oldModel.coordinate = entity.coordinate; oldModel.latitude = entity.latitude; oldModel.longitude = entity.longitude; oldModel.updateTime = entity.updateTime; oldModel.isDefault = entity.isDefault; //if (entity.coordinate.Contains(",")) //{ // var latlong = entity.coordinate.Split(","); // oldModel.latitude = latlong[0]; // oldModel.longitude = latlong[1]; //} var isDefaultObj = DbClient.Queryable().Where(p => p.isDefault == true).Any(); if (isDefaultObj && entity.isDefault == true) { await DbClient.Updateable().SetColumns(it => it.isDefault == false).Where(p => p.id > 0).ExecuteCommandAsync(); } else if (!isDefaultObj) { oldModel.isDefault = true; } //事物处理过程结束 var bl = await DbClient.Updateable(oldModel).ExecuteCommandHasChangeAsync(); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #region Sql根据条件查询分页数据带距离 /// /// Sql根据条件查询分页数据带距离 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 纬度 /// 精度 /// public async Task> QueryPageAsyncByCoordinate(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, decimal latitude = 0, decimal longitude = 0) { RefAsync totalCount = 0; //MySql与SqlServer查询语句相同 List page; if (latitude > 0 && longitude > 0) { var sqrt = "SQRT(power(SIN((" + latitude + "*PI()/180-(CoreCmsStore.latitude)*PI()/180)/2),2)+COS(" + latitude + "*PI()/180)*COS((CoreCmsStore.latitude)*PI()/180)*power(SIN((" + longitude + "*PI()/180-(CoreCmsStore.longitude)*PI()/180)/2),2))"; var sql = "SELECT id, storeName, mobile, linkMan, logoImage, areaId, address, coordinate, latitude, longitude, isDefault, createTime, updateTime, ROUND(6378.138*2*ASIN(" + sqrt + ")*1000,2) AS distance FROM CoreCmsStore"; page = await DbClient.SqlQueryable(sql) .WhereIF(predicate != null, predicate) .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .Select(p => new CoreCmsStore { id = p.id, storeName = p.storeName, mobile = p.mobile, linkMan = p.linkMan, logoImage = p.logoImage, areaId = p.areaId, address = p.address, coordinate = p.coordinate, latitude = p.latitude, longitude = p.longitude, isDefault = p.isDefault, createTime = p.createTime, updateTime = p.updateTime, distance = Convert.ToDecimal(p.distance) }).ToPageListAsync(pageIndex, pageSize, totalCount); } else { page = await DbClient.Queryable() .WhereIF(predicate != null, predicate) .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .Select(p => new CoreCmsStore { id = p.id, storeName = p.storeName, mobile = p.mobile, linkMan = p.linkMan, logoImage = p.logoImage, areaId = p.areaId, address = p.address, coordinate = p.coordinate, latitude = p.latitude, longitude = p.longitude, isDefault = p.isDefault, createTime = p.createTime, updateTime = p.updateTime, distance = Convert.ToDecimal(p.distance) }).ToPageListAsync(pageIndex, pageSize, totalCount); } var list = new PageList(page, pageIndex, pageSize, totalCount); return list; } #endregion #region 根据用户序列获取单个门店数据 /// /// 根据用户序列获取单个门店数据 /// /// 用户序列 /// 门店序列 /// 是否使用WITH(NOLOCK) /// public async Task GetStoreByUserId(int userId, int storeId, bool blUseNoLock = false) { CoreCmsStore obj; if (blUseNoLock) { obj = await DbClient.Queryable((p, clerks) => new JoinQueryInfos( JoinType.Left, p.id == clerks.storeId )) .Where((p, clerks) => clerks.userId == userId && p.id == storeId) .Select((p, clerks) => new CoreCmsStore { id = p.id, storeName = p.storeName, mobile = p.mobile, linkMan = p.linkMan, logoImage = p.logoImage, areaId = p.areaId, address = p.address, coordinate = p.coordinate, latitude = p.latitude, longitude = p.longitude, isDefault = p.isDefault, createTime = p.createTime, updateTime = p.updateTime, }).With(SqlWith.NoLock) .FirstAsync(); } else { obj = await DbClient.Queryable((p, clerks) => new JoinQueryInfos( JoinType.Left, p.id == clerks.storeId )) .Where((p, clerks) => clerks.userId == userId && p.id == storeId) .Select((p, clerks) => new CoreCmsStore { id = p.id, storeName = p.storeName, mobile = p.mobile, linkMan = p.linkMan, logoImage = p.logoImage, areaId = p.areaId, address = p.address, coordinate = p.coordinate, latitude = p.latitude, longitude = p.longitude, isDefault = p.isDefault, createTime = p.createTime, updateTime = p.updateTime, }) .FirstAsync(); } return obj; } #endregion } }