using Microsoft.AspNetCore.Authorization; using System.Text; using System.Text.RegularExpressions; using YieldChain.Helpers; using YLErp.Configuration; namespace YLErp.Web.Controllers { /// /// 专用于输出前端JS的控制器 /// 数据必须为非敏感数据 /// [MyAuthorizeIgnore] public class FrontController : BaseController { //基础数据(缓存60s) [ResponseCache(Duration = 60, Location = ResponseCacheLocation.Any)] public ActionResult BasicData(IEnumerable types) { var js = new BasicDataJsBuilder(CurUser).Build(types); return Content(js, "text/javascript"); } //格式化选项(缓存600s) [AllowAnonymous] [ResponseCache(Duration = 600, Location = ResponseCacheLocation.Any)] public ActionResult OtcFormat() { var js = string.Empty; var filePath = Server.MapPath("~/App_Data/Config/otcformat.js"); if (System.IO.File.Exists(filePath)) { js = System.IO.File.ReadAllText(filePath); } filePath = Server.MapPath("~/Scripts/base/otcformat.js"); js += System.IO.File.ReadAllText(filePath); return Content(js, "text/javascript"); } //今年及前后两年的日历数据(缓存120s) [ResponseCache(Duration = 120, Location = ResponseCacheLocation.Any)] public ActionResult Calendar() { //相信数据的准确性同时年份确定为4位数字 var dic = CalendarBLL.GetRecentCalendarModel().Select(n => new { key = n.Year.ToString() + ("chn".Equals(n.Country, StringComparison.OrdinalIgnoreCase) ? "" : n.Country?.ToLowerInvariant()), val = string.IsNullOrWhiteSpace(n.HolidayJson) ? Enumerable.Empty() : Regex.Matches(n.HolidayJson, n.Year + @",\d\d,\d\d").Cast() .Select(m => m.Value.Substring(5).Remove(2, 1)) .OrderBy(m => m).ToArray() }).ToDictionary(n => n.key, n => n.val); var json = JsonHelper.Serialize(dic); var script = string.Concat("var ylotc=ylotc||{};ylotc.calendar=", json, Properties.Resources.ylotc_calendar); return Content(script, "text/javascript"); } [ResponseCache(Duration = 30, Location = ResponseCacheLocation.Any)] public ActionResult ClientEditConfig() { var json = Modules.SystemModule.ClientEditConfigService.GetConfigJson(); return Content(json, "text/javascript"); } /// /// 基础数据构建器 /// class BasicDataJsBuilder : BasicViewModel { const string ylotcDefine = "var ylotc=ylotc||{};ylotc.$basicData=1;"; StringBuilder _sb; public BasicDataJsBuilder(UserInfo userInfo) : base(userInfo) { } public string Build(IEnumerable types) { if (types == null || !types.Any()) { return ylotcDefine; } _sb = new StringBuilder(300); _sb.AppendLine(ylotcDefine); foreach (var type in types) { switch (type) { case "簿记": case "簿记账户": case nameof(AssetUnit): AssetUnit(); break; case "簿记ALL": case "簿记账户ALL": case nameof(AssetUnitALL): AssetUnitALL(); break; case "簿记账户组": AssetUnitGroup(); break; case "客户": case "客户信息": case nameof(DBModels.Client): Client(); break; case "标的": case "标的信息": case nameof(DBModels.underlying_manager): UnderlyingManager(false, false); break; case "标的Live": case "标的信息Live": UnderlyingManager(true, false); break; case "权益标的": case "权益标的信息": UnderlyingManager(false, true); break; case "权益标的Live": case "权益标的信息Live": UnderlyingManager(true, true); break; case "广发商贸标的信息": GFUnderlyingManager(true, false); break; case "品种": case "标的品种": case nameof(Variety): Variety(); break; case "品种类型": VarietyTypes(); break; case "标的板块": case "板块性质": UnderlyingBlocks(); break; case "交易员": Traders(); break; case "系统用户": SystemUsers(); break; } } return _sb.ToString(); } // 簿记账户 private void AssetUnit() { var datas = JsDataModel.GetAssetUnits(CurUser); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.assetunits=").Append(dataJson).AppendLine(";"); } // 簿记账户(所有) private void AssetUnitALL() { var datas = JsDataModel.GetAllAssetUnits(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.assetunits=").Append(dataJson).AppendLine(";"); } // 簿记账户组 private void AssetUnitGroup() { var datas = JsDataModel.GetAssetUnitGroups(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.assetunitgroups=").Append(dataJson).AppendLine(";"); } // 客户信息 private void Client() { var datas = JsDataModel.GetClients(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.clients=").Append(dataJson).AppendLine(";"); } // 标的信息 private void UnderlyingManager(bool onlyLive, bool onlyEquity) { var datas = JsDataModel.GetUnderlyings(onlyLive, onlyEquity); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.underlyings=").Append(dataJson).AppendLine(";"); } private void GFUnderlyingManager(bool onlyLive, bool onlyEquity) { var datas = JsDataModel.GetGFUnderlyings(onlyLive, onlyEquity); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.gfunderlyings=").Append(dataJson).AppendLine(";"); } //标的品种 private void Variety() { var datas = JsDataModel.GetVarieties(CurUser); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.varieties=").Append(dataJson).AppendLine(";"); } /// /// 标的品种类型 /// private void VarietyTypes() { var datas = JsDataModel.GetVarietyTypes(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.varietyGroups=").Append(dataJson).AppendLine(";"); } /// /// 标的板块性质 /// private void UnderlyingBlocks() { var datas = JsDataModel.GetUnderlyingBlocks(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.underlyingBlocks=").Append(dataJson).AppendLine(";"); } /// /// 交易员 /// private void Traders() { var traders = UserBLL.GetUsersByPosition(); var datas = traders.Select(n => new { id = n.Id, n.Name, n.UserGroup, PinYin = PingYinHelper.GetFirstPinYin(n.Name) }).ToArray(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.traders=").Append(dataJson).AppendLine(";"); } /// /// 系统所有用户 /// private void SystemUsers() { var systemUsers = UserBLL.GetSystemsByUserId(); var datas = systemUsers.Select(n => new { id = n.Id, n.Name, n.UserGroup, PinYin = PingYinHelper.GetFirstPinYin(n.Name) }).ToArray(); var dataJson = JsonHelper.Serialize(datas); _sb.Append("ylotc.sysusers=").Append(dataJson).AppendLine(";"); } public override string ToString() { return _sb.ToString(); } } } }