diff --git a/YLErpDAL/Modules/SystemModule/XBondSpreadService.cs b/YLErpDAL/Modules/SystemModule/XBondSpreadService.cs new file mode 100644 index 00000000..1aa8e9e0 --- /dev/null +++ b/YLErpDAL/Modules/SystemModule/XBondSpreadService.cs @@ -0,0 +1,50 @@ +using BaseOUDAL; +using YLErp.Cache; + +namespace YLErp.Modules.SystemModule +{ + /// + /// XBond偏移设置(净价) + /// + public class XBondSpreadService : BaseService + { + + private const string RedisKey = "md:netprice:spread"; + public XBondSpreadService() + { + } + + public XBondSpread Result { get; private set; } + + public void SetXBondSpread(XBondSpread xBondSpread, IYLCache ylCache) + { + if (ylCache.CacheEnable()) + { + ylCache.StringSet(RedisKey, xBondSpread); + } + else + { + Result = xBondSpread; + } + } + + public XBondSpread GetXBondSpread(IYLCache ylCache) + { + if (ylCache.CacheEnable()) + { + return ylCache.StringGet(RedisKey); + } + else + { + return Result; + } + } + } + + public class XBondSpread + { + public int bid { get; set; } + + public int ofr { get; set; } + } +} diff --git a/YLErpWeb/Controllers/ExchangeTradeController.cs b/YLErpWeb/Controllers/ExchangeTradeController.cs index 93f54830..321f2fb5 100644 --- a/YLErpWeb/Controllers/ExchangeTradeController.cs +++ b/YLErpWeb/Controllers/ExchangeTradeController.cs @@ -1,4 +1,6 @@ -using YLErp.Modules.ExchangeTradeModule; +using YLErp.Cache; +using YLErp.Modules.ExchangeTradeModule; +using YLErp.Modules.SystemModule; namespace YLErp.Web.Controllers { @@ -7,6 +9,11 @@ namespace YLErp.Web.Controllers /// public class ExchangeTradeController : BaseController { + private IYLCache _yLCache; + public ExchangeTradeController(IYLCache yLCache) + { + _yLCache = yLCache; + } /// /// 场内交易列表 /// @@ -255,5 +262,20 @@ namespace YLErp.Web.Controllers } return JsonSuccess(); } + + /// + /// 偏移设置 + /// + /// + public ActionResult SpreadSetting() + { + return View(new XBondSpreadService().GetXBondSpread(_yLCache) ?? new XBondSpread() { bid = 0, ofr = 0 }); + } + + public JsonResult AjaxSaveSpreadSetting(XBondSpread data) + { + new XBondSpreadService().SetXBondSpread(data, _yLCache); + return JsonSuccess(); + } } } diff --git a/YLErpWeb/Views/ExchangeTrade/SpreadSetting.cshtml b/YLErpWeb/Views/ExchangeTrade/SpreadSetting.cshtml new file mode 100644 index 00000000..6c950785 --- /dev/null +++ b/YLErpWeb/Views/ExchangeTrade/SpreadSetting.cshtml @@ -0,0 +1,84 @@ +@using YLErp.Modules.SystemModule +@model XBondSpread +@{ + ViewBag.Title = "偏移设置"; + Layout = "~/Views/Shared/_InfoLayout.cshtml"; +} + +@section CSS{ + +} + + +@section JS{ + +} + +
+
+ +
+
+ 净价bid偏移 + + × 0.0001 (元) +
+
+ 例:若此处输入3;买入净价为99.8055时,偏移后为99.8052 +
+
+ + +
+
+ 净价ofr偏移 + + × 0.0001 (元) +
+
+ 例:若此处输入3;卖出净价为99.8055时,偏移后为99.8058 +
+
+ +
+
保存后10分钟后生效
+
+ + + +
+
\ No newline at end of file diff --git a/YLErpWeb/Views/ExchangeTrade/TradeList.cshtml b/YLErpWeb/Views/ExchangeTrade/TradeList.cshtml index c333d033..40715e33 100644 --- a/YLErpWeb/Views/ExchangeTrade/TradeList.cshtml +++ b/YLErpWeb/Views/ExchangeTrade/TradeList.cshtml @@ -83,6 +83,7 @@ @if (CurUser.交易管理_标的交易新增){
+ @MyControls.Btn("偏移设置", "spreadSetting()") @MyControls.Btn("批量调整", "batchTradeAdjustView()")
} diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/exchange/tradeList.js b/YLErpWeb/wwwroot/Scripts/app/trade/exchange/tradeList.js index 5fa31c1f..a76bbef1 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/exchange/tradeList.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/exchange/tradeList.js @@ -1,278 +1,322 @@ !page.PostData && (page.PostData = { IsOption: page.IsOption }); $(function () { + $("#createInvote2").click(function () { + var tempTrim = String.prototype.trim; + String.prototype.trim = function () { + var firstChar = ""; + if (this.indexOf("\t") === 0) { + firstChar = "\t"; + } + return firstChar + this.replace(/(^\s*)|(\s*$)/g, ""); + }; + ExcellentExport.csv(this, "excelTable"); + String.prototype.trim = tempTrim; + return; + }); - $('#createInvote2').click( - function () { - var tempTrim = String.prototype.trim; - String.prototype.trim = function () { - var firstChar = ""; - if (this.indexOf("\t") === 0) { - firstChar = "\t"; - } - return firstChar + this.replace(/(^\s*)|(\s*$)/g, ""); - }; - ExcellentExport.csv(this, 'excelTable'); - String.prototype.trim = tempTrim; - return; - } - ); + $(".datepicker").datepicker({ + changeMonth: true, + changeYear: true, + showButtonPanel: true, + showOtherMonths: true, + selectOtherMonths: true, + }); - $(".datepicker").datepicker({ - changeMonth: true, - changeYear: true, - showButtonPanel: true, - showOtherMonths: true, - selectOtherMonths: true - }); + var url = "/ExchangeTrade/AjaxGetTradeList"; - var url = "/ExchangeTrade/AjaxGetTradeList"; + grid = jQuery("#listGrid").jqGrid({ + cmTemplate: { + width: 80, + align: "center", + sortable: false, + }, + url: url, + datatype: "json", + multiselect: true, + height: "auto", + width: "96%", + autowidth: false, + shrinkToFit: false, + viewrecords: true, + jsonReader: { repeatitems: false }, + mtype: "POST", + postData: page.PostData, + ondblClickRow: rowdblclick, + colModel: getColModelGrid(), + pager: jQuery("#pagerGrid"), + pagerpos: "left", + rowNum: 25, + rowList: [25, 50, 100, 200, 10000], + loadComplete: gridComplete, + }); - grid = jQuery('#listGrid').jqGrid({ - cmTemplate: { - width: 80, - align: 'center', - sortable: false - }, - url: url, - datatype: 'json', - multiselect: true, - height: 'auto', - width: '96%', - autowidth: false, - shrinkToFit: false, - viewrecords: true, - jsonReader: { repeatitems: false }, - mtype: 'POST', - postData: page.PostData, - ondblClickRow: rowdblclick, - colModel: getColModelGrid(), - pager: jQuery('#pagerGrid'), - pagerpos: 'left', - rowNum: 25, - rowList: [25, 50, 100, 200, 10000], - loadComplete: gridComplete - }); + $(window).on("keydown", function (event) { + var e = event || window.event; + e && e.keyCode === 13 && SearchClick(true); + }); - $(window).on('keydown', function (event) { - var e = event || window.event; - (e && e.keyCode === 13) && SearchClick(true); - }); - - if ($('#UnderlyingIds').length) { - let flag = tradeHelper.UnderlyingSelectFlag; - let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl('#UnderlyingIds').setFlag(flag.UsePinYinFilter | flag.IncludeMatured); - } + if ($("#UnderlyingIds").length) { + let flag = tradeHelper.UnderlyingSelectFlag; + let underlyingCtrl = new tradeHelper.UnderlyingSelectCtrl( + "#UnderlyingIds" + ).setFlag(flag.UsePinYinFilter | flag.IncludeMatured); + } }); function DoubleFormat(cellValue, options, rowObject) { - return cellValue ? cellValue.toFixed(2) : "0.00"; + return cellValue ? cellValue.toFixed(2) : "0.00"; } function gridComplete() { - var jgrid = $(this); - main.setcolumnChooser(jgrid, page.configcolumn); - var newHeight = $(window).height() - 350; - $(".ui-jqgrid .ui-jqgrid-bdiv").css("cssText", "height: " + newHeight + "px!important;"); - selAllGrid(); + var jgrid = $(this); + main.setcolumnChooser(jgrid, page.configcolumn); + var newHeight = $(window).height() - 350; + $(".ui-jqgrid .ui-jqgrid-bdiv").css( + "cssText", + "height: " + newHeight + "px!important;" + ); + selAllGrid(); } function showToolName(cellValue, options, rowObject) { - return ''; + return ( + '' + ); } function rowdblclick(rowid) { - var rowData = $(this).getRowData(rowid); - if (rowData.EncryptId && rowData.TradeType) { - starttradeView(rowData.EncryptId); - } + var rowData = $(this).getRowData(rowid); + if (rowData.EncryptId && rowData.TradeType) { + starttradeView(rowData.EncryptId); + } } function startAddtrade() { - layer.open({ - type: 2, - title: "新增交易", - shadeClose: false, - shade: 0.4, - area: ['1200px', '650px'], - content: "/ExchangeTrade/" + (page.IsOption ? "optionTradeEdit" : "tradeEdit") + "/0" - }); + layer.open({ + type: 2, + title: "新增交易", + shadeClose: false, + shade: 0.4, + area: ["1200px", "650px"], + content: + "/ExchangeTrade/" + + (page.IsOption ? "optionTradeEdit" : "tradeEdit") + + "/0", + }); } function starttradeView(id) { - var srcurl = "/ExchangeTrade/tradeView/?enid=" + id; - main.open("查看交易", srcurl, { area: ["1200px", "650px"] }); + var srcurl = "/ExchangeTrade/tradeView/?enid=" + id; + main.open("查看交易", srcurl, { area: ["1200px", "650px"] }); } function reloadtrade() { - //重新加载 - SearchClick(); + //重新加载 + SearchClick(); } function uploadTrade(id) { - main.open("导入场内交易", "/exchangeTrade/tradeUpload", { area: ['800px', '600px'] }); + main.open("导入场内交易", "/exchangeTrade/tradeUpload", { + area: ["800px", "600px"], + }); } function SearchClick(isSearchclick) { - let listGrid = $('#listGrid'); - let postData = $.extend({}, page.PostData, $('#form1').serializeObject()); - listGrid.setPostData(postData) - if (isSearchclick === true) { - listGrid.jqGrid('setGridParam', { page: 1 }); - } - listGrid.trigger('reloadGrid'); + let listGrid = $("#listGrid"); + let postData = $.extend({}, page.PostData, $("#form1").serializeObject()); + listGrid.setPostData(postData); + if (isSearchclick === true) { + listGrid.jqGrid("setGridParam", { page: 1 }); + } + listGrid.trigger("reloadGrid"); } function exportTradeChoose() { - var dateTemp = new Date().Format("yyyyMMddhhmmss"); - var fileName = "导出场内" + (page.IsOption ? "期权" : "对冲") + "交易" + "_" + dateTemp; - main.toExcel("listGrid", fileName, "csv", null, "操作", [{ - colName: "交易编号", - formatter: "text" - }, { - colName: "标的代码", - formatter: "text" - }]); + var dateTemp = new Date().Format("yyyyMMddhhmmss"); + var fileName = + "导出场内" + (page.IsOption ? "期权" : "对冲") + "交易" + "_" + dateTemp; + main.toExcel("listGrid", fileName, "csv", null, "操作", [ + { + colName: "交易编号", + formatter: "text", + }, + { + colName: "标的代码", + formatter: "text", + }, + ]); } function showcolumnChooser() { - var jgrid = jQuery('#listGrid'); - main.showcolumnChooser(jgrid, page.configcolumn); + var jgrid = jQuery("#listGrid"); + main.showcolumnChooser(jgrid, page.configcolumn); } function selAllGrid() { - var checkAll = $("#CheckboxAll").prop("checked"); + var checkAll = $("#CheckboxAll").prop("checked"); + $("#cb_listGrid").click(); + var cbGridClick = $("#cb_listGrid").prop("checked"); + if (checkAll !== cbGridClick) { $("#cb_listGrid").click(); - var cbGridClick = $("#cb_listGrid").prop("checked"); - if (checkAll !== cbGridClick) { - $("#cb_listGrid").click(); - } + } } //ESC $(document).keyup(function (event) { - switch (event.keyCode) { - case 27: - window.parent.layer.closeAll(); - $(".jconfirm-open").addClass("hide");//关闭取消分组弹层 - } + switch (event.keyCode) { + case 27: + window.parent.layer.closeAll(); + $(".jconfirm-open").addClass("hide"); //关闭取消分组弹层 + } }); function getColModelGrid() { - return [ - { - name: 'id', - label: 'id', - hidden: true, - optionHide: true - }, { - name: 'EncryptId', - label: 'EncryptId', - hidden: true, - optionHide: true - }, { - name: '', - label: '操作', - formatter: showToolName - }, { - name: 'AssetBookName', - label: '簿记账户', - width: 110, - align: 'center' - }, { - name: 'TradeType', - label: '交易类型', - hidden: page.IsOption, - optionHide: page.IsOption, - formatter: function (cellvalue, options, rowObject) { - return cellvalue === '商品期货' ? '期货' : cellvalue; - } - }, { - name: 'TradeDate', - label: '成交日期', - width: 90, - formatter: 'date' - }, { - name: 'TradeSide', - label: '交易方向' - }, { - name: 'UnderlyingCode', - label: '标的代码' - }, { - name: 'UnderlyingName', - label: '标的名称' - }, { - name: 'OptionCode', - label: '期权代码', - width: 120, - hidden: !page.IsOption, - optionHide: !page.IsOption, - }, { - name: 'ExerciseMode', - label: '行权方式', - hidden: !page.IsOption, - optionHide: !page.IsOption, - }, { - name: 'TradeLots', - label: '交易手数' - }, { - name: 'SheetAmount', - label: '交易数量/张数', - formatter: tradeHelper.getNotionalFormatByDouble - }, { - name: 'TradeSinglePriceForBond', - label: '成交价', - formatter: otcformat.trading.marginRate - }, { - name: 'TraderName', - label: '交易员', - hidden: page.IsOption - }, { - name: 'TradeNumber', - label: '交易编号', - width: 150, - hidden: true - }, { - name: 'ExchangeAccountCode', - label: '对冲账户', - width: 110, - hidden: true - }, { - name: 'OptDate', - label: '操作时间', - width: 160, - formatter: 'datetime' - }, { - name: 'OptName', - label: '操作者' - }, { - name: 'Comments', - label: '备注' - }, { - name: 'TradeSource', - label: '交易来源' - } - ]; + return [ + { + name: "id", + label: "id", + hidden: true, + optionHide: true, + }, + { + name: "EncryptId", + label: "EncryptId", + hidden: true, + optionHide: true, + }, + { + name: "", + label: "操作", + formatter: showToolName, + }, + { + name: "AssetBookName", + label: "簿记账户", + width: 110, + align: "center", + }, + { + name: "TradeType", + label: "交易类型", + hidden: page.IsOption, + optionHide: page.IsOption, + formatter: function (cellvalue, options, rowObject) { + return cellvalue === "商品期货" ? "期货" : cellvalue; + }, + }, + { + name: "TradeDate", + label: "成交日期", + width: 90, + formatter: "date", + }, + { + name: "TradeSide", + label: "交易方向", + }, + { + name: "UnderlyingCode", + label: "标的代码", + }, + { + name: "UnderlyingName", + label: "标的名称", + }, + { + name: "OptionCode", + label: "期权代码", + width: 120, + hidden: !page.IsOption, + optionHide: !page.IsOption, + }, + { + name: "ExerciseMode", + label: "行权方式", + hidden: !page.IsOption, + optionHide: !page.IsOption, + }, + { + name: "TradeLots", + label: "交易手数", + }, + { + name: "SheetAmount", + label: "交易数量/张数", + formatter: tradeHelper.getNotionalFormatByDouble, + }, + { + name: "TradeSinglePriceForBond", + label: "成交价", + formatter: otcformat.trading.marginRate, + }, + { + name: "TraderName", + label: "交易员", + hidden: page.IsOption, + }, + { + name: "TradeNumber", + label: "交易编号", + width: 150, + hidden: true, + }, + { + name: "ExchangeAccountCode", + label: "对冲账户", + width: 110, + hidden: true, + }, + { + name: "OptDate", + label: "操作时间", + width: 160, + formatter: "datetime", + }, + { + name: "OptName", + label: "操作者", + }, + { + name: "Comments", + label: "备注", + }, + { + name: "TradeSource", + label: "交易来源", + }, + ]; } function reloadData() { - $('#listGrid').trigger('reloadGrid'); + $("#listGrid").trigger("reloadGrid"); } - function batchTradeAdjustView() { - var selectedIds = $('#listGrid').jqGrid('getGridParam', 'selarrrow'); - var ors = []; - if (selectedIds.length > 0) { - for (var i = 0; i < selectedIds.length; i++) { - var or = $('#listGrid').getRowData(selectedIds[i]).id; - ors.push(or); - } - } - if (ors.length == 0) { - main.alert("请选中数据才能批量调整"); - } else { - main.open("批量调整", "/ExchangeTrade/BatchTradeAdjustView?Ids=" + ors.join(','), { area: ['500px', '40%'] }); + var selectedIds = $("#listGrid").jqGrid("getGridParam", "selarrrow"); + var ors = []; + if (selectedIds.length > 0) { + for (var i = 0; i < selectedIds.length; i++) { + var or = $("#listGrid").getRowData(selectedIds[i]).id; + ors.push(or); } + } + if (ors.length == 0) { + main.alert("请选中数据才能批量调整"); + } else { + main.open( + "批量调整", + "/ExchangeTrade/BatchTradeAdjustView?Ids=" + ors.join(","), + { area: ["500px", "40%"] } + ); + } +} -} \ No newline at end of file +// 偏移设置 +function spreadSetting() { + main.open("偏移设置", "/ExchangeTrade/SpreadSetting", { + area: ["450px", "310px"], + }); +}