123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using CZFW.Core;
- using CZFW.Framework.Model.ViewModel;
- using CZFW.Framework.Tools;
- using CZFW.MDB.Interface;
- using CZFW.MDB.Util;
- using MongoDB.Bson;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace CZFW.MDB.Logic
- {
- public class CategoryRepository : ICMSCategory
- {
- IMongoRepository _repository;
- ISchemaRepository _schema;
- IPage _pageRepository;
- public CategoryRepository(IMongoRepository mongoRepository, ISchemaRepository schema, IPage page)
- {
- _repository = mongoRepository;
- _schema = schema;
- _pageRepository = page;
- }
- public BsonArray GetTplCategorySrc(string tplName)
- {
- var qry = $"{{name:\"{tplName}_{Constants.CATEGORY_TABLE_NAME}\"}}";
- var proj = $"{{{Constants.DATA_SOURCE_FILED}:1}}";
- var categories = _schema.GetOne(tplName, qry, proj);
- if (categories is null) return null;
- return categories[Constants.DATA_SOURCE_FILED].AsBsonArray;
- }
-
- public ResultModel SyncTplCategorySource(string tplName, string sid)
- {
- try
- {
- var categories = GetTplCategorySrc(tplName);
- var pageName = $"{tplName}_{Constants.CATEGORY_TABLE_NAME}";
- _repository.SetCurrentTable(pageName);
- var existings = _pageRepository.GetListByName(sid, pageName, pageSize:10000);
- foreach (var item1 in categories)
- {
- var item = item1.AsBsonDocument;
- var exist1 = existings.SingleOrDefault(x => x["cate_name"].AsString == item["cate_name"].AsString && x["lang"].AsString == item["lang"].AsString);
- if (exist1 is null)
- {
- item[Constants.SITE_NAME_FIELD] = sid;
- var tp = _repository.InsertBson(item.AsBsonDocument);
- }
- else
- {
- var exist = exist1.AsBsonDocument;
- if (!exist.Contains(Constants.SITE_NAME_FIELD))
- exist.Add(Constants.SITE_NAME_FIELD, sid);
- if (exist.AsBsonDocument.Contains(Constants.CATEGORY_CHILDREN_FIELD))
- {
- if (item.AsBsonDocument.Contains(Constants.CATEGORY_CHILDREN_FIELD))
- item[Constants.CATEGORY_CHILDREN_FIELD] = exist[Constants.CATEGORY_CHILDREN_FIELD];
- else
- item.Add(Constants.CATEGORY_CHILDREN_FIELD, exist[Constants.CATEGORY_CHILDREN_FIELD]);
- }
- item[Constants.SITE_NAME_FIELD] = sid;
- _repository.ReplaceBson(exist["_id"].AsObjectId, item.AsBsonDocument);
- }
- }
- var ids = categories.Select(x => x[Constants.CATEGORY_ID_FIELD].AsString).ToList();
- var toRemove = existings.Where(x => !ids.Contains(x[Constants.CATEGORY_ID_FIELD].AsString)).Select(x => x[Constants.THE_ID_FILED].AsObjectId).ToList();
- foreach (var item in toRemove)
- {
- _repository.RemoveByObjectId(item);
- }
- return new ResultModel();
- }
- catch(Exception err)
- {
- return new ResultModel(false, err.Message, err);
- }
-
- }
- public static BsonDocument GetCategory(string siteName, string cateName, string tplName, string lang=null)
- {
- if (string.IsNullOrWhiteSpace(lang)) {
- lang = SysConfig.DefaultLanguage();
- }
- if (!CacheHelper.TryRead(Constants.CATEGORY_CACHE_PREFIX + cateName+lang, out BsonDocument data))
- {
- IMongoRepository mongoRepository = new MongoRepository($"{tplName}_{Constants.CATEGORY_TABLE_NAME}");
- data = mongoRepository.GetOne($"{{{Constants.CATEGORY_ID_FIELD}:'{cateName}', '{Constants.LANG_FIELD}':'{lang}'}}");
- CacheHelper.WriteCache(siteName, $"{Constants.CATEGORY_CACHE_PREFIX}{cateName}", data, TimeSpan.FromMinutes(ConfigHelper.GetValue<int>("SiteCacheExpireMinutes")));
- }
- return data;
- }
- }
- }
|