Files
zszq-trs/YLErpWeb/Controllers/FrontController.cs
T
2024-05-09 14:06:26 +08:00

263 lines
9.9 KiB
C#

using Microsoft.AspNetCore.Authorization;
using System.Text;
using System.Text.RegularExpressions;
using YieldChain.Helpers;
using YLErp.Configuration;
namespace YLErp.Web.Controllers
{
/// <summary>
/// 专用于输出前端JS的控制器
/// 数据必须为非敏感数据
/// </summary>
[MyAuthorizeIgnore]
public class FrontController : BaseController
{
//基础数据(缓存60s)
[ResponseCache(Duration = 60, Location = ResponseCacheLocation.Any)]
public ActionResult BasicData(IEnumerable<string> 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<string>()
: Regex.Matches(n.HolidayJson, n.Year + @",\d\d,\d\d").Cast<Match>()
.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");
}
/// <summary>
/// 基础数据构建器
/// </summary>
class BasicDataJsBuilder : BasicViewModel
{
const string ylotcDefine = "var ylotc=ylotc||{};ylotc.$basicData=1;";
StringBuilder _sb;
public BasicDataJsBuilder(UserInfo userInfo) : base(userInfo)
{
}
public string Build(IEnumerable<string> 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(";");
}
/// <summary>
/// 标的品种类型
/// </summary>
private void VarietyTypes()
{
var datas = JsDataModel.GetVarietyTypes();
var dataJson = JsonHelper.Serialize(datas);
_sb.Append("ylotc.varietyGroups=").Append(dataJson).AppendLine(";");
}
/// <summary>
/// 标的板块性质
/// </summary>
private void UnderlyingBlocks()
{
var datas = JsDataModel.GetUnderlyingBlocks();
var dataJson = JsonHelper.Serialize(datas);
_sb.Append("ylotc.underlyingBlocks=").Append(dataJson).AppendLine(";");
}
/// <summary>
/// 交易员
/// </summary>
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(";");
}
/// <summary>
/// 系统所有用户
/// </summary>
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();
}
}
}
}