PageRenderTime 55ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/Yintai.Hangzhou.Repository/Impl/PromotionRepository.cs

https://github.com/yuchaoonline/ytoo.service
C# | 799 lines | 480 code | 119 blank | 200 comment | 78 complexity | e4fb646a6ebf0018dca08d2f9729dfe6 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. using System.Linq.Expressions;
  7. using Yintai.Architecture.Common.Data.EF;
  8. using Yintai.Architecture.Common.Models;
  9. using Yintai.Architecture.Framework.ServiceLocation;
  10. using Yintai.Hangzhou.Data.Models;
  11. using Yintai.Hangzhou.Model.Enums;
  12. using Yintai.Hangzhou.Model.Filters;
  13. using Yintai.Hangzhou.Repository.Contract;
  14. namespace Yintai.Hangzhou.Repository.Impl
  15. {
  16. public class PromotionRepository : RepositoryBase<PromotionEntity, int>, IPromotionRepository
  17. {
  18. #region Overrides of RepositoryBase<PromotionEntity,int>
  19. /// <summary>
  20. /// 查找key
  21. /// </summary>
  22. /// <param name="key"></param>
  23. /// <returns></returns>
  24. public override PromotionEntity GetItem(int key)
  25. {
  26. return base.Find(key);
  27. }
  28. #endregion
  29. #region methods
  30. private static IOrderedQueryable<PromotionEntity> OrderBy(IQueryable<PromotionEntity> e, PromotionSortOrder sort)
  31. {
  32. var order = OrderBy(sort);
  33. return order(e);
  34. }
  35. /// <summary>
  36. /// 排序
  37. /// </summary>
  38. /// <param name="sort"></param>
  39. /// <returns></returns>
  40. private static Func<IQueryable<PromotionEntity>, IOrderedQueryable<PromotionEntity>> OrderBy(PromotionSortOrder sort)
  41. {
  42. Func<IQueryable<PromotionEntity>, IOrderedQueryable<PromotionEntity>> orderBy = null;
  43. switch (sort)
  44. {
  45. case PromotionSortOrder.CreatedDateDesc:
  46. orderBy = v => v.OrderByDescending(s => s.CreatedDate);
  47. break;
  48. case PromotionSortOrder.Near:
  49. break;
  50. case PromotionSortOrder.Hot://最热
  51. orderBy = v => v.OrderByDescending(s => s.IsTop).ThenByDescending(s => s.LikeCount);
  52. break;
  53. //最新
  54. case PromotionSortOrder.New:
  55. orderBy = v => v.OrderByDescending(s => s.IsTop).ThenByDescending(s => s.StartDate);
  56. break;
  57. case PromotionSortOrder.StartAsc:
  58. orderBy = v => v.OrderByDescending(s => s.IsTop).ThenBy(s => s.StartDate);
  59. break;
  60. case PromotionSortOrder.StartDesc:
  61. case PromotionSortOrder.Default:
  62. default:
  63. orderBy = v => v.OrderByDescending(s => s.IsTop).ThenByDescending(s => s.StartDate);
  64. break;
  65. }
  66. return orderBy;
  67. }
  68. /// <summary>
  69. /// 过滤 今天开始的活动
  70. /// </summary>
  71. /// <param name="dataStatus">数据状态</param>
  72. /// <param name="rangeInfo">时间范围</param>
  73. /// <param name="timestamp">时间戳</param>
  74. /// <param name="recommendUser"></param>
  75. /// <returns></returns>
  76. private static Expression<Func<PromotionEntity, bool>> Filter2(DataStatus? dataStatus, DateTimeRangeInfo rangeInfo, Timestamp timestamp, int? recommendUser)
  77. {
  78. /*查询逻辑
  79. * 1.今天开始的活动
  80. * 2.以前开始,今天还自进行的活动
  81. * 3.即将开始的活动,时间升序 24小时内的
  82. *
  83. * logic 例 size40
  84. */
  85. //2
  86. var filter = Filter(dataStatus, rangeInfo, timestamp, recommendUser);
  87. var start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
  88. filter = filter.And(v => v.StartDate < start);
  89. return filter;
  90. }
  91. /// <summary>
  92. /// 过滤 今天开始的活动
  93. /// </summary>
  94. /// <param name="dataStatus">数据状态</param>
  95. /// <param name="rangeInfo">时间范围</param>
  96. /// <param name="timestamp">时间戳</param>
  97. /// <param name="recommendUser"></param>
  98. /// <returns></returns>
  99. private static Expression<Func<PromotionEntity, bool>> Filter3(DataStatus? dataStatus, DateTimeRangeInfo rangeInfo, Timestamp timestamp, int? recommendUser)
  100. {
  101. /*查询逻辑
  102. * 1.今天开始的活动
  103. * 2.以前开始,今天还自进行的活动
  104. * 3.即将开始的活动,时间升序 24小时内的
  105. *
  106. * logic 例 size40
  107. */
  108. //3
  109. var start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).AddDays(1);
  110. var filter = Filter(dataStatus, rangeInfo, timestamp, recommendUser);
  111. filter = filter.And(v => v.StartDate >= start);
  112. return filter;
  113. }
  114. /// <summary>
  115. /// 过滤 今天开始的活动
  116. /// </summary>
  117. /// <param name="dataStatus">数据状态</param>
  118. /// <param name="rangeInfo">时间范围</param>
  119. /// <param name="timestamp">时间戳</param>
  120. /// <param name="recommendUser"></param>
  121. /// <returns></returns>
  122. private static Expression<Func<PromotionEntity, bool>> Filter1(DataStatus? dataStatus, DateTimeRangeInfo rangeInfo, Timestamp timestamp, int? recommendUser)
  123. {
  124. /*查询逻辑
  125. * 1.今天开始的活动
  126. * 2.以前开始,今天还自进行的活动
  127. * 3.即将开始的活动,时间升序 24小时内的
  128. *
  129. * logic 例 size40
  130. */
  131. var filter = Filter(dataStatus, rangeInfo, timestamp, recommendUser);
  132. var start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
  133. var end = start.AddDays(1);
  134. filter = filter.And(v => v.StartDate >= start && v.StartDate <= end);
  135. return filter;
  136. }
  137. /// <summary>
  138. ///
  139. /// </summary>
  140. /// <param name="pagerRequest"></param>
  141. /// <param name="totalCount"></param>
  142. /// <param name="sortOrder"></param>
  143. /// <param name="dateTimeRangeInfo"></param>
  144. /// <param name="coordinateInfo"></param>
  145. /// <param name="timestamp"></param>
  146. /// <param name="recommendUser"></param>
  147. /// <returns></returns>
  148. private List<PromotionEntity> GetPagedListByNew(PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder,
  149. DateTimeRangeInfo dateTimeRangeInfo, CoordinateInfo coordinateInfo, Timestamp timestamp, int? recommendUser)
  150. {
  151. /*查询逻辑
  152. * 1.今天开始的活动
  153. * 2.以前开始,今天还自进行的活动
  154. * 3.即将开始的活动,时间升序 24小时内的
  155. *
  156. * logic 例 size40
  157. */
  158. var r = new DateTimeRangeInfo
  159. {
  160. EndDateTime = DateTime.Now
  161. };
  162. var f1 = Filter1(DataStatus.Normal, r, timestamp, recommendUser);
  163. var f2 = Filter2(DataStatus.Normal, r, timestamp, recommendUser);
  164. var skip = (pagerRequest.PageIndex - 1) * pagerRequest.PageSize;
  165. var t = base.Get(f1)
  166. .Union(
  167. base.Get(f2));
  168. totalCount = t.Count();
  169. if (pagerRequest.PageSize == 1)
  170. {
  171. return t.OrderByDescending(s => s.IsTop).ThenByDescending(v => v.StartDate).Take(pagerRequest.PageSize).ToList();
  172. }
  173. return t.OrderByDescending(s => s.IsTop).ThenByDescending(v => v.StartDate).Skip(skip).Take(pagerRequest.PageSize).ToList();
  174. }
  175. /// <summary>
  176. ///
  177. /// </summary>
  178. /// <param name="skipCount"></param>
  179. /// <param name="pagerRequest"></param>
  180. /// <param name="totalCount"></param>
  181. /// <param name="sortOrder"></param>
  182. /// <param name="dateTimeRangeInfo"></param>
  183. /// <param name="coordinateInfo"></param>
  184. /// <param name="timestamp"></param>
  185. /// <param name="recommendUser"></param>
  186. /// <returns></returns>
  187. private List<PromotionEntity> GetPagedListByBeStart(int? skipCount, PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder,
  188. DateTimeRangeInfo dateTimeRangeInfo, CoordinateInfo coordinateInfo, Timestamp timestamp, int? recommendUser)
  189. {
  190. /*查询逻辑
  191. * 1.今天开始的活动
  192. * 2.以前开始,今天还自进行的活动
  193. * 3.即将开始的活动,时间升序 24小时内的
  194. *
  195. * logic 例 size40
  196. */
  197. var f3 = Filter3(DataStatus.Normal, new DateTimeRangeInfo() { EndDateTime = DateTime.Now }, timestamp, recommendUser);
  198. if (skipCount == null)
  199. {
  200. return
  201. base.Get(f3, out totalCount, pagerRequest.PageIndex, pagerRequest.PageSize,
  202. OrderBy(PromotionSortOrder.StartAsc)).ToList();
  203. }
  204. else
  205. {
  206. return
  207. base.Get(f3, out totalCount, pagerRequest.PageIndex, pagerRequest.PageSize,
  208. OrderBy(PromotionSortOrder.StartAsc), skipCount.Value).ToList();
  209. }
  210. }
  211. /// <summary>
  212. /// 过滤
  213. /// </summary>
  214. /// <param name="dataStatus">数据状态</param>
  215. /// <param name="rangeInfo">时间范围</param>
  216. /// <param name="timestamp">时间戳</param>
  217. /// <param name="recommendUser"></param>
  218. /// <returns></returns>
  219. private static Expression<Func<PromotionEntity, bool>> Filter(DataStatus? dataStatus, DateTimeRangeInfo rangeInfo, Timestamp timestamp, int? recommendUser)
  220. {
  221. return Filter(dataStatus, rangeInfo, timestamp, recommendUser, null);
  222. }
  223. /// <summary>
  224. /// 过滤
  225. /// </summary>
  226. /// <param name="dataStatus">数据状态</param>
  227. /// <param name="rangeInfo">时间范围</param>
  228. /// <param name="timestamp">时间戳</param>
  229. /// <param name="recommendUser"></param>
  230. /// <param name="tagids"></param>
  231. /// <returns></returns>
  232. private static Expression<Func<PromotionEntity, bool>> Filter(DataStatus? dataStatus, DateTimeRangeInfo rangeInfo, Timestamp timestamp, int? recommendUser, List<int> tagids, PromotionFilterMode? filterMode = null, List<int> ids = null, bool? hasProduct = null)
  233. {
  234. return Filter(
  235. new PromotionFilter
  236. {
  237. DataStatus = dataStatus,
  238. DateTimeRangeInfo = rangeInfo,
  239. Timestamp = timestamp,
  240. RecommendUser = recommendUser,
  241. FilterMode = filterMode,
  242. HasProduct = hasProduct,
  243. Ids = ids,
  244. TagIds = tagids
  245. }
  246. );
  247. }
  248. /// <summary>
  249. /// 过滤
  250. /// </summary>
  251. /// <returns></returns>
  252. private static Expression<Func<PromotionEntity, bool>> Filter(PromotionFilter promotionFilter)
  253. {
  254. var filter = PredicateBuilder.True<PromotionEntity>();
  255. //always exclude deleted record
  256. filter = filter.And(v => v.Status != (int)DataStatus.Deleted);
  257. if (promotionFilter.DataStatus != null)
  258. {
  259. filter = filter.And(v => v.Status == (int)promotionFilter.DataStatus.Value);
  260. }
  261. //TODO: 这块值得商榷
  262. if (promotionFilter.DateTimeRangeInfo != null)
  263. {
  264. //开始时间必须大于当前时间,才叫开始
  265. //if (rangeInfo.StartDateTime != null)
  266. //{
  267. // filter = filter.And(v => v.StartDate >= rangeInfo.StartDateTime);
  268. //}
  269. if (promotionFilter.DateTimeRangeInfo.EndDateTime != null)
  270. {
  271. filter = filter.And(v => v.EndDate > promotionFilter.DateTimeRangeInfo.EndDateTime);
  272. }
  273. }
  274. if (promotionFilter.Timestamp != null)
  275. {
  276. switch (promotionFilter.Timestamp.TsType)
  277. {
  278. case TimestampType.New:
  279. filter = filter.And(v => v.UpdatedDate >= promotionFilter.Timestamp.Ts);
  280. break;
  281. case TimestampType.Old:
  282. default:
  283. filter = filter.And(v => v.UpdatedDate < promotionFilter.Timestamp.Ts);
  284. break;
  285. }
  286. }
  287. if (promotionFilter.RecommendUser != null)
  288. {
  289. filter = filter.And(v => v.RecommendUser == promotionFilter.RecommendUser.Value);
  290. }
  291. if (promotionFilter.TagIds != null && promotionFilter.TagIds.Count > 0)
  292. {
  293. if (promotionFilter.TagIds.Count == 1)
  294. {
  295. filter = filter.And(v => v.Tag_Id == promotionFilter.TagIds[0]);
  296. }
  297. else
  298. {
  299. filter = filter.Or(v => promotionFilter.TagIds.Any(s => s == v.Tag_Id));
  300. }
  301. }
  302. if (promotionFilter.FilterMode != null)
  303. {
  304. switch (promotionFilter.FilterMode)
  305. {
  306. case PromotionFilterMode.InProgress:
  307. if (promotionFilter.DateTimeRangeInfo != null && promotionFilter.DateTimeRangeInfo.EndDateTime != null)
  308. {
  309. filter = filter.And(v => v.StartDate < DateTime.Now);
  310. }
  311. else
  312. {
  313. filter = filter.And(v => v.StartDate < DateTime.Now && v.EndDate > DateTime.Now);
  314. }
  315. break;
  316. case PromotionFilterMode.NotTheEnd:
  317. if (promotionFilter.DateTimeRangeInfo != null)
  318. {
  319. if (promotionFilter.DateTimeRangeInfo.EndDateTime != null)
  320. {
  321. filter = filter.And(v => v.EndDate > promotionFilter.DateTimeRangeInfo.EndDateTime);
  322. }
  323. if (promotionFilter.DateTimeRangeInfo.StartDateTime != null)
  324. {
  325. filter = filter.And(v => v.StartDate > promotionFilter.DateTimeRangeInfo.StartDateTime);
  326. }
  327. }
  328. else
  329. {
  330. filter = filter.And(v => v.EndDate > DateTime.Now);
  331. }
  332. break;
  333. }
  334. }
  335. if (promotionFilter.Ids != null && promotionFilter.Ids.Count > 0)
  336. {
  337. filter = filter.And(v => promotionFilter.Ids.Any(s => s == v.Id));
  338. }
  339. if (promotionFilter.HasProduct != null)
  340. {
  341. filter = filter.And(v => v.IsProdBindable == promotionFilter.HasProduct);
  342. }
  343. return filter;
  344. }
  345. #endregion
  346. #region Implementation of IPromotionRepository
  347. public List<PromotionEntity> GetPagedList(PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder,
  348. DateTimeRangeInfo dateTimeRangeInfo, CoordinateInfo coordinateInfo, Timestamp timestamp,
  349. int? recommendUser, PromotionFilterMode filterMode, int? specialSkipCount)
  350. {
  351. if (specialSkipCount == null || specialSkipCount.Value == 0 || filterMode != PromotionFilterMode.BeginStart)
  352. {
  353. return GetPagedList(pagerRequest, out totalCount, sortOrder, dateTimeRangeInfo, coordinateInfo,
  354. timestamp, recommendUser, filterMode);
  355. }
  356. var skipCount = specialSkipCount.Value;
  357. return GetPagedListByBeStart(skipCount,
  358. pagerRequest, out totalCount, sortOrder, dateTimeRangeInfo, coordinateInfo,
  359. timestamp, recommendUser);
  360. }
  361. public List<PromotionEntity> GetPagedList(PagerRequest pagerRequest, out int totalCount,
  362. PromotionSortOrder sortOrder,
  363. DateTimeRangeInfo dateTimeRangeInfo, CoordinateInfo coordinateInfo,
  364. Timestamp timestamp, int? recommendUser)
  365. {
  366. return GetPagedList(pagerRequest, out totalCount, sortOrder, dateTimeRangeInfo, coordinateInfo, timestamp,
  367. recommendUser, PromotionFilterMode.Default);
  368. }
  369. public IQueryable<PromotionEntity> Get(PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder, Timestamp timestamp, PromotionFilterMode? filterMode, DataStatus? dataStatus, bool? hasBanner)
  370. {
  371. return Get(pagerRequest, out totalCount, sortOrder, new PromotionFilter
  372. {
  373. DataStatus = dataStatus,
  374. FilterMode = filterMode,
  375. HasBanner = hasBanner,
  376. Timestamp = timestamp
  377. });
  378. }
  379. public IQueryable<PromotionEntity> Get(PromotionFilter filter)
  380. {
  381. var linq = base.Get(Filter(filter.DataStatus, null, filter.Timestamp, filter.RecommendUser, null, filter.FilterMode, null, filter.HasProduct));
  382. if (filter.HasBanner != null && filter.HasBanner.Value)
  383. {
  384. var banners = ServiceLocator.Current.Resolve<IBannerRepository>()
  385. .Get(null, SourceType.Promotion, DataStatus.Normal);
  386. linq = linq.Join(banners, p => p.Id, f => f.SourceId, (p, f) => p);
  387. }
  388. return linq;
  389. }
  390. public IQueryable<PromotionEntity> Get(PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder, PromotionFilter filter)
  391. {
  392. var linq = Get(filter);
  393. totalCount = linq.Count();
  394. var skipCount = (pagerRequest.PageIndex - 1) * pagerRequest.PageSize;
  395. linq = OrderBy(linq, sortOrder);
  396. linq = skipCount == 0 ? linq.Take(pagerRequest.PageSize) : linq.Skip(skipCount).Take(pagerRequest.PageSize);
  397. return linq;
  398. }
  399. public PromotionEntity SetCount(PromotionCountType countType, int id, int count)
  400. {
  401. var proEntity = Find(id);
  402. switch (countType)
  403. {
  404. case PromotionCountType.FavoriteCount:
  405. proEntity.FavoriteCount++;
  406. break;
  407. case PromotionCountType.InvolvedCount:
  408. proEntity.InvolvedCount++;
  409. break;
  410. case PromotionCountType.LikeCount:
  411. proEntity.LikeCount++;
  412. break;
  413. case PromotionCountType.ShareCount:
  414. proEntity.ShareCount++;
  415. break;
  416. }
  417. proEntity.UpdatedDate = DateTime.Now;
  418. Update(proEntity);
  419. return proEntity;
  420. }
  421. public int SetIsProd(int id, bool? isProd)
  422. {
  423. var parames = new List<SqlParameter>
  424. {
  425. new SqlParameter("@IsProdBindable", isProd),
  426. new SqlParameter("@Id", id),
  427. };
  428. var sql = @"UPDATE [dbo].[Promotion]
  429. SET [IsProdBindable] = @IsProdBindable
  430. WHERE [Id] = @Id";
  431. var i = SqlHelper.ExecuteNonQuery(SqlHelper.GetConnection(), CommandType.Text, sql, parames.ToArray());
  432. return i;
  433. }
  434. public List<PromotionEntity> GetPagedListForSearch(PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder,
  435. DateTimeRangeInfo dateTimeRangeInfo, CoordinateInfo coordinateInfo, Timestamp timestamp,
  436. int? recommendUser, PromotionFilterMode? filterMode, string promotionName, List<int> tagids,
  437. int? brandId)
  438. {
  439. var filter = Filter(DataStatus.Normal, null, timestamp, recommendUser, tagids);
  440. if (!String.IsNullOrWhiteSpace(promotionName))
  441. {
  442. filter = filter.And(v => v.Name.StartsWith(promotionName));
  443. }
  444. return base.Get(filter, out totalCount, pagerRequest.PageIndex,
  445. pagerRequest.PageSize, OrderBy(sortOrder)).ToList();
  446. }
  447. public List<PromotionEntity> GetPagedList(PagerRequest pagerRequest, out int totalCount, PromotionSortOrder sortOrder,
  448. DateTimeRangeInfo dateTimeRangeInfo, CoordinateInfo coordinateInfo, Timestamp timestamp, int? recommendUser, PromotionFilterMode filterMode)
  449. {
  450. if (filterMode == PromotionFilterMode.New)
  451. {
  452. return GetPagedListByNew(pagerRequest, out totalCount, sortOrder, dateTimeRangeInfo, coordinateInfo,
  453. timestamp, recommendUser);
  454. }
  455. if (filterMode == PromotionFilterMode.BeginStart)
  456. {
  457. return GetPagedListByBeStart(null, pagerRequest, out totalCount, sortOrder, dateTimeRangeInfo, coordinateInfo,
  458. timestamp, recommendUser);
  459. }
  460. if (coordinateInfo != null)
  461. {
  462. //存储
  463. return GetPagedList(pagerRequest.PageIndex, pagerRequest.PageSize, out totalCount, (int)sortOrder,
  464. coordinateInfo.Longitude, coordinateInfo.Latitude, timestamp);
  465. }
  466. return
  467. base.Get(Filter(DataStatus.Normal, dateTimeRangeInfo, timestamp, recommendUser), out totalCount, pagerRequest.PageIndex,
  468. pagerRequest.PageSize, OrderBy(sortOrder)).ToList();
  469. }
  470. /// <summary>
  471. /// 排序
  472. /// </summary>
  473. /// <param name="pageIndex"></param>
  474. /// <param name="pageSize"></param>
  475. /// <param name="totalCount"></param>
  476. /// <param name="sort"></param>
  477. /// <returns></returns>
  478. public List<PromotionEntity> GetPagedList(int pageIndex, int pageSize, out int totalCount, int sort)
  479. {
  480. return GetPagedList(new PagerRequest(pageIndex, pageSize), out totalCount,
  481. (PromotionSortOrder)sort, new DateTimeRangeInfo() { EndDateTime = DateTime.Now }, null,
  482. null, null);
  483. //return base.Get(
  484. // Filter(DataStatus.Normal, new DateTimeRangeInfo { StartDateTime = null, EndDateTime = DateTime.Now },
  485. // null, null), out totalCount, pageIndex, pageSize, OrderBy(sort)).ToList();
  486. //return base.Get(v => v.Status == 1 && v.StartDate <= DateTime.Now && v.EndDate > DateTime.Now, out totalCount, pageIndex, pageSize, OrderBy(sort)).ToList();
  487. }
  488. /// <summary>
  489. /// 分页
  490. /// </summary>
  491. /// <param name="pageIndex"></param>
  492. /// <param name="pageSize"></param>
  493. /// <param name="totalCount"></param>
  494. /// <param name="sort"></param>
  495. /// <param name="timestamp">时间戳 </param>
  496. /// <returns></returns>
  497. public List<PromotionEntity> GetPagedList(int pageIndex, int pageSize, out int totalCount, int sort, Timestamp timestamp)
  498. {
  499. return GetPagedList(new PagerRequest(pageIndex, pageSize), out totalCount,
  500. (PromotionSortOrder)sort, new DateTimeRangeInfo() { EndDateTime = DateTime.Now }, null,
  501. timestamp, null);
  502. // return base.Get(
  503. //Filter(DataStatus.Normal, new DateTimeRangeInfo { StartDateTime = null, EndDateTime = DateTime.Now },
  504. // timestamp, null), out totalCount, pageIndex, pageSize, OrderBy(sort)).ToList();
  505. //if (timestamp == null)
  506. //{
  507. // return GetPagedList(pageIndex, pageSize, out totalCount, sort);
  508. //}
  509. //switch (timestamp.TsType)
  510. //{
  511. // case TimestampType.New:
  512. // return base.Get(v => v.Status == 1 && v.StartDate <= DateTime.Now && v.EndDate > DateTime.Now && v.UpdatedDate >= timestamp.Ts, out totalCount, pageIndex, pageSize, OrderBy(sort)).ToList();
  513. // case TimestampType.Old:
  514. // default:
  515. // return base.Get(v => v.Status == 1 && v.StartDate <= DateTime.Now && v.EndDate > DateTime.Now && v.UpdatedDate < timestamp.Ts, out totalCount, pageIndex, pageSize, OrderBy(sort)).ToList();
  516. //}
  517. }
  518. /// <summary>
  519. ///
  520. /// </summary>
  521. /// <param name="pageIndex"></param>
  522. /// <param name="pageSize"></param>
  523. /// <param name="totalCount"></param>
  524. /// <param name="sort"></param>
  525. /// <param name="lng"></param>
  526. /// <param name="lat"></param>
  527. /// <param name="timestamp">时间戳 </param>
  528. /// <returns></returns>
  529. public List<PromotionEntity> GetPagedList(int pageIndex, int pageSize, out int totalCount, int sort, double lng, double lat, Timestamp timestamp)
  530. {
  531. if (timestamp == null)
  532. {
  533. return GetPagedList(pageIndex, pageSize, out totalCount, sort, lng, lat);
  534. }
  535. var output = new SqlParameter("@TotalCount", SqlDbType.Int) { Direction = ParameterDirection.Output };
  536. var parames = new SqlParameter[7];
  537. var data = DateTime.Now;
  538. parames[0] = new SqlParameter("@Longitude", lng);
  539. parames[1] = new SqlParameter("@Latitude", lat);
  540. parames[2] = new SqlParameter("@StartDate", data);
  541. parames[3] = new SqlParameter("@PageSize", pageSize);
  542. parames[4] = new SqlParameter("@PageIndex", pageIndex);
  543. parames[5] = output;
  544. parames[6] = new SqlParameter("@TsDate", timestamp.Ts);
  545. var list = new List<PromotionEntity>(pageSize);
  546. using (var reader = SqlHelper.ExecuteReader(SqlHelper.GetConnection(), CommandType.StoredProcedure,
  547. "[dbo].[Promotion_GetPagedListByCoordinateAndTs]", parames))
  548. {
  549. while (reader.Read())
  550. {
  551. var entity = ConvertEntity(reader);
  552. list.Add(entity);
  553. }
  554. }
  555. totalCount = Int32.Parse(output.Value.ToString());
  556. return list;
  557. }
  558. public List<PromotionEntity> GetPagedList(int pageIndex, int pageSize, out int totalCount, int sort, double lng, double lat)
  559. {
  560. var parames = new SqlParameter[6];
  561. var data = DateTime.Now;
  562. parames[0] = new SqlParameter("@Longitude", lng);
  563. parames[1] = new SqlParameter("@Latitude", lat);
  564. parames[2] = new SqlParameter("@StartDate", data);
  565. parames[3] = new SqlParameter("@PageSize", pageSize);
  566. parames[4] = new SqlParameter("@PageIndex", pageIndex);
  567. parames[5] = new SqlParameter("@TotalCount", 0) { Direction = ParameterDirection.Output };
  568. var list = new List<PromotionEntity>(pageSize);
  569. using (var reader = SqlHelper.ExecuteReader(SqlHelper.GetConnection(), CommandType.StoredProcedure,
  570. "[dbo].[Promotion_GetPagedListByCoordinate]", parames))
  571. {
  572. while (reader.Read())
  573. {
  574. var entity = ConvertEntity(reader);
  575. list.Add(entity);
  576. }
  577. }
  578. totalCount = Int32.Parse(parames[5].Value.ToString());
  579. return list;
  580. }
  581. /// <summary>
  582. ///
  583. /// </summary>
  584. /// <param name="pageSize"></param>
  585. /// <param name="sort"></param>
  586. /// <param name="timestamp">时间戳 </param>
  587. /// <returns></returns>
  588. public List<PromotionEntity> GetList(int pageSize, int sort, Timestamp timestamp)
  589. {
  590. int totalCount;
  591. return GetPagedList(1, pageSize, out totalCount, sort, timestamp);
  592. //switch (timestamp.TsType)
  593. //{
  594. // case TimestampType.New:
  595. // return base.Get(v => v.Status == 1 && v.StartDate <= DateTime.Now && v.EndDate > DateTime.Now && v.UpdatedDate >= timestamp.Ts, OrderBy(sort)).Take(pageSize).ToList();
  596. // case TimestampType.Old:
  597. // default:
  598. // return base.Get(v => v.Status == 1 && v.StartDate <= DateTime.Now && v.EndDate > DateTime.Now && v.UpdatedDate < timestamp.Ts, OrderBy(sort)).Take(pageSize).ToList();
  599. //}
  600. }
  601. /// <summary>
  602. ///
  603. /// </summary>
  604. /// <param name="pageSize"></param>
  605. /// <param name="sort"></param>
  606. /// <param name="lng"></param>
  607. /// <param name="lat"></param>
  608. /// <param name="timestamp">时间戳 </param>
  609. /// <returns></returns>
  610. public List<PromotionEntity> GetList(int pageSize, int sort, double lng, double lat, Timestamp timestamp)
  611. {
  612. var parames = new SqlParameter[6];
  613. var data = DateTime.Now;
  614. parames[0] = new SqlParameter("@Longitude", lng);
  615. parames[1] = new SqlParameter("@Latitude", lat);
  616. parames[2] = new SqlParameter("@StartDate", data);
  617. parames[3] = new SqlParameter("@PageSize", pageSize);
  618. parames[5] = new SqlParameter("@TsType", (int)timestamp.TsType);
  619. parames[4] = new SqlParameter("@TsDate", timestamp.Ts);
  620. var list = new List<PromotionEntity>(pageSize);
  621. using (var reader = SqlHelper.ExecuteReader(SqlHelper.GetConnection(), CommandType.StoredProcedure,
  622. "[dbo].[Promotion_GetListByCoordinate]", parames))
  623. {
  624. while (reader.Read())
  625. {
  626. var entity = ConvertEntity(reader);
  627. list.Add(entity);
  628. }
  629. }
  630. return list;
  631. }
  632. /// <summary>
  633. ///
  634. /// </summary>
  635. /// <param name="ids"></param>
  636. /// <returns></returns>
  637. public List<PromotionEntity> GetList(List<int> ids)
  638. {
  639. return base.Get(v => ids.Any(s => s == v.Id) && v.Status == (int)DataStatus.Normal).ToList();
  640. }
  641. public List<PromotionEntity> GetList(List<int> ids, DataStatus? dataStatus, PromotionFilterMode? filterMode)
  642. {
  643. return base.Get(Filter(dataStatus, new DateTimeRangeInfo { EndDateTime = DateTime.Now }, null, null, null, filterMode, ids)).ToList();
  644. }
  645. private static PromotionEntity ConvertEntity(IDataRecord record)
  646. {
  647. if (record == null)
  648. {
  649. return null;
  650. }
  651. var model = new PromotionEntity
  652. {
  653. Id = Int32.Parse(record["Id"].ToString()),
  654. Name = record["Name"].ToString(),
  655. Description = record["Description"].ToString(),
  656. CreatedUser = Int32.Parse(record["CreatedUser"].ToString()),
  657. CreatedDate = DateTime.Parse(record["CreatedDate"].ToString()),
  658. UpdatedDate = DateTime.Parse(record["UpdatedDate"].ToString()),
  659. UpdatedUser = Int32.Parse(record["UpdatedUser"].ToString()),
  660. StartDate = DateTime.Parse(record["StartDate"].ToString()),
  661. EndDate = DateTime.Parse(record["EndDate"].ToString()),
  662. Status = Int32.Parse(record["Status"].ToString()),
  663. RecommendSourceId = Int32.Parse(record["RecommendSourceId"].ToString()),
  664. RecommendSourceType = Int32.Parse(record["RecommendSourceType"].ToString()),
  665. LikeCount = Int32.Parse(record["LikeCount"].ToString()),
  666. FavoriteCount = Int32.Parse(record["FavoriteCount"].ToString()),
  667. ShareCount = Int32.Parse(record["ShareCount"].ToString()),
  668. InvolvedCount = Int32.Parse(record["InvolvedCount"].ToString()),
  669. Store_Id = Int32.Parse(record["Store_Id"].ToString()),
  670. RecommendUser = Int32.Parse(record["RecommendUser"].ToString()),
  671. Tag_Id = Int32.Parse(record["Tag_Id"].ToString()),
  672. IsTop = Boolean.Parse(record["IsTop"].ToString()),
  673. IsProdBindable = DBNull.Value == record["IsProdBindable"] ? new Nullable<bool>() : Boolean.Parse(record["IsProdBindable"].ToString()),
  674. PublicationLimit = DBNull.Value == record["PublicationLimit"] ? new Nullable<int>() : Int32.Parse(record["PublicationLimit"].ToString()),
  675. };
  676. return model;
  677. }
  678. #endregion
  679. }
  680. }