123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using CZFW.CMS.Admin;
- using CZFW.Core;
- using CZFW.Framework.Model.ViewModel;
- using CZFW.Framework.Tools;
- using CZFW.MDB;
- using CZFW.MDB.Interface;
- using CZFW.MDB.Util;
- using Microsoft.AspNetCore.Mvc;
- using MongoDB.Bson;
- using Newtonsoft.Json.Linq;
- using System.Collections.Generic;
- using System.IO;
- namespace CZFW.CMS.Admin.Controllers
- {
- public class PageController : AdminControllerBase
- {
- ISchemaRepository _schemaLogic;
- IPage _pageLogic;
- IMongoRepository _repository;
- ICMSCategory _categoryRepository;
- public PageController(ISchemaRepository schemaLogic, IPage page, IMongoRepository repository, ICMSCategory category)
- {
- _repository = repository;
- _categoryRepository = category;
- _pageLogic = page;
- _schemaLogic = schemaLogic;
- }
- public IActionResult List(string id = null, string pageName = null, string query = "{}", string type = "backend.table", string projection = "{}", int pageIndex = 1, int pageSize = 20, string sort = "{}")
- {
- var data = new BsonArray();
- if (string.IsNullOrWhiteSpace(pageName))
- data = _pageLogic.GetList(Site.SiteName, id, type, query, projection, pageIndex, pageSize, sort);
- else
- {
- pageName = $"{Site.TplName}_{pageName}";
- data = _pageLogic.GetListByName(Site.SiteName, pageName, type, query, projection, pageIndex, pageSize, sort);
- }
- var json = data.CZToJson();
- return Content(json, "application/json");
- }
- public IActionResult GetHeader(string key, string type = "backend.table")
- {
- var data = _schemaLogic.GetHeader(key, type, out string name);
- var json = data.CZToJson();
- return Content(json, "application/json");
- }
- public ResultModel GetCount(string pageName, string query = "{}")
- {
- if (!pageName.Contains(Site.TplName))
- pageName = $"{Site.TplName}_{pageName}";
- _repository.SetCurrentTable(pageName);
- var qry = JObject.Parse(query);
- if (!qry.ContainsKey(Constants.SITE_NAME_FIELD))
- qry[Constants.SITE_NAME_FIELD] = Site.SiteName;
- else
- qry.Add(Constants.SITE_NAME_FIELD, Site.SiteName);
- query = qry.ToString();
- var count = _repository.GetCount(query);
- var res = new ResultModel { Success = true, Data = count };
- return res;
- }
- public IActionResult Get(string pageId, string dataId, string projection = null, string type = "backend.view")
- {
- var header = _schemaLogic.GetHeader(pageId, type, out string name);
- var json = header.CZToJson();
- if (string.IsNullOrWhiteSpace(projection))
- {
- projection = json;
- }
- _repository.SetCurrentTable(name);
- var res = _repository.Get(dataId, projection);
- var jsonRes = res.CZToJson();
- return Content(jsonRes, "application/json");
- }
- public IActionResult GetOne(string id = null, string pageName = null, string query = "{}", string type = "", string projection = "{}", string sort = "{}")
- {
- var data = new BsonArray();
- if (string.IsNullOrWhiteSpace(pageName))
- data = _pageLogic.GetList(Site.SiteName, id, type, query, projection, 1, 1, sort);
- else
- {
- pageName = $"{Site.TplName}_{pageName}";
- data = _pageLogic.GetListByName(Site.SiteName, pageName, type, query, projection, 1, 1, sort);
- }
- var json = "{}";
- if (data != null)
- if (data.Count > 0)
- json = data[0].AsBsonDocument.CZToJson();
- return Content(json, "application/json");
- }
- public ResultModel Create(string pageId, [FromBody]string objJson)
- {
- var name = _schemaLogic.GetNameById(pageId);
- var jobj = JObject.Parse(objJson);
- if (jobj.ContainsKey(Constants.SITE_NAME_FIELD))
- jobj[Constants.SITE_NAME_FIELD] = Site.SiteName;
- else
- jobj.Add(Constants.SITE_NAME_FIELD, Site.SiteName);
- if (jobj.ContainsKey(Constants.SORT_ORDER_FIELD))
- {
- if (jobj[Constants.SORT_ORDER_FIELD] == null)
- jobj[Constants.SORT_ORDER_FIELD] = AutoInc.GetNext(Site.SiteName, name, Site.TplName);
- else if (!int.TryParse(jobj[Constants.SORT_ORDER_FIELD].ToString(), out int sort))
- {
- jobj[Constants.SORT_ORDER_FIELD] = AutoInc.GetNext(Site.SiteName, name, Site.TplName);
- }
- }
- objJson = jobj.ToString();
- _repository.SetCurrentTable(name);
- var res = _repository.Insert(objJson);
- return res;
- }
- public ResultModel Replace(string pageId, string dataId, [FromBody]string objJson)
- {
- var name = _schemaLogic.GetNameById(pageId);
- _repository.SetCurrentTable(name);
- var jobj = JObject.Parse(objJson);
- if (jobj.ContainsKey(Constants.SITE_NAME_FIELD))
- jobj[Constants.SITE_NAME_FIELD] = Site.SiteName;
- else
- jobj.Add(Constants.SITE_NAME_FIELD, Site.SiteName);
- objJson = jobj.ToString();
- var res = _repository.Replace(dataId, objJson);
- return res;
- }
- public ResultModel Remove(string pageId, string dataId)
- {
- var name = _schemaLogic.GetNameById(pageId);
- _repository.SetCurrentTable(name);
- var res = _repository.Remove(dataId);
- return res;
- }
- public ResultModel SyncCate()
- {
- var res = _categoryRepository.SyncTplCategorySource(Site.TplName, Site.SiteName);
- return res;
- }
- /// <summary>
- /// 导出Excel
- /// </summary>
- /// <param name="pageName">页面名称</param>
- /// <param name="data">标题key/value对象</param>
- /// <param name="query">查询条件</param>
- /// <param name="projection">查询列</param>
- /// <param name="pageIndex">页码</param>
- /// <param name="pageSize">每页条数</param>
- /// <param name="sort">排序条件</param>
- /// <returns>文件二进制流</returns>
- public ResultModel Export(string pageName, [FromBody]JObject data, string query = "{}", string projection = "{}", int pageIndex = 1, int pageSize = 20, string sort = "{}")
- {
- // 设置页面名称
- if (!pageName.Contains(Site.TplName))
- pageName = $"{Site.TplName}_{pageName}";
- _repository.SetCurrentTable(pageName);
- var titleList = data.Value<JArray>("data");
- var titleKeys = new List<string>();
- var titleValues = new List<string>();
- foreach (var item in titleList)
- {
- titleKeys.Add(item.Value<string>("key"));
- titleValues.Add(item.Value<string>("value"));
- }
- var list = _repository.GetList(query, projection, pageIndex, pageSize, sort);
- var dataList = new List<BsonDocument>();
- foreach (var item in list)
- {
- dataList.Add(item.AsBsonDocument);
- }
- var res = NPOIHelper.OutputExcel(dataList, titleKeys, titleValues);
- var fileName = Utility.GetUnixTimeTick().ToString() + ".xlsx";
- var filePathRoot = ConfigHelper.GetValue<string>("ResourcePathRoot");
- var destPath = Path.Combine(filePathRoot, Site.SiteName, "export", fileName);
- using (FileStream fs = new FileStream(destPath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
- {
- fs.Write(res, 0, res.Length);
- }
- return Result(data: $"/{Constants.RESOURCE_FILE_URL_PREFIX}/{Site.SiteName}/export/{fileName}");
- }
- }
- }
|