using Core.Web.App_Start; using Core.Web.WebHelper; using CRM.Core.BLL; using CRM.Core.Common.Layui; using CRM.Core.Common.WebHelper; using CRM.Core.DTO; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Text; using System.Web.Helpers; using System.Web.Mvc; using System.Web.Script.Serialization; using System.Web.Services.Description; using WX.CRM.Common; using WX.CRM.Common.StockHelper; namespace Core.Web.Controllers { public class StockPoolController : BaseController { private StockPools_BL _stockBL = new StockPools_BL(); private WX.CRM.Common.ValidationErrors errors = new WX.CRM.Common.ValidationErrors(); public StockPoolController() { } [AuthorizeRedirect(RightsConfig.CONST_股票报备, ToolBarConfig.CONST_NotButton, true)] [HttpGet] public ActionResult Index() { ViewBag.rightCode = RightsConfig.CONST_股票报备; var select = BuildInduNameList(); ViewBag.InduList = select.InduInfo; return View(); } [HttpPost] [AuthorizeRedirect(RightsConfig.CONST_股票报备, ToolBarConfig.CONST_NotButton, false)] public JsonResult Index(Laypage pager, SearchStockPoolPageDto dto) { try { var list = _stockBL.GetList(ref pager, dto); foreach (var item in list) { item.StatusName = item.Status == null ? "禁用" : item.Status == 0 ? "正常" : "禁用"; item.UpdateTime = !string.IsNullOrWhiteSpace(item.UpdateTime) ? Convert.ToDateTime(item.UpdateTime).ToString("yyyy-MM-dd HH:mm:ss") : item.UpdateTime; } var data = new LayuiData() { msg = "数据加载成功!", count = pager.count, code = 0, data = list }; return Json(data, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new { }, JsonRequestBehavior.AllowGet); } } public JsonResult Page(Laypage pager, SearchStockPoolNewPageDto dto) { var url = ConfigurationManager.AppSettings["StockPoolUrlNew"]; var authorization = ConfigurationManager.AppSettings["StockPoolAuthorization"]; dto.PageNum = pager.page; dto.PageSize = pager.limit; var json = JsonConvert.SerializeObject(dto, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }); var result = Utility.PostAjaxData($"{url}/stockpool/api/stock/pool/page", json, authorization, true); var data = JsonHelper.FromJson>(result); pager.count = data.Total; return Json(data, JsonRequestBehavior.AllowGet); } public JsonResult LogPage(Laypage pager, int id) { var url = ConfigurationManager.AppSettings["StockPoolUrlNew"]; var authorization = ConfigurationManager.AppSettings["StockPoolAuthorization"]; var request = $"pageNum={pager.page}&pageSize={pager.limit}&stockReportId={id}&businessType=1"; var result = Utility.GetData($"{url}/stockpool/api/stock/report/listOperateLog", request, authorization, true); var data = JsonHelper.FromJson>(result); pager.count = data.Total; return Json(data, JsonRequestBehavior.AllowGet); } [AuthorizeRedirect(RightsConfig.CONST_股票报备, ToolBarConfig.CONST_NotButton, true)] [HttpGet] public ActionResult ReportList() { ViewBag.rightCode = RightsConfig.CONST_股票报备; var select = BuildInduNameList(); ViewBag.InduList = select.InduInfo; ViewBag.ProductLineName = select.ProductLineName; ViewBag.OperatorName = select.OperatorName; ViewBag.ColumnName = select.ColumnName; return View(); } [HttpPost] [AuthorizeRedirect(RightsConfig.CONST_股票报备, ToolBarConfig.CONST_NotButton, false)] public JsonResult ReportList(Laypage pager, SearchStockAuditPageDto dto) { try { var list = _stockBL.GetReportList(ref pager, dto); var data = new LayuiData() { msg = "数据加载成功!", count = pager.count, code = 0, data = list }; return Json(data, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new { }, JsonRequestBehavior.AllowGet); } } [HttpGet] [AuthorizeRedirect(RightsConfig.CONST_股票报备, ToolBarConfig.CONST_NotButton, true)] public ActionResult Log(int id) { ViewBag.Id = id; return View(); } [HttpGet] [AuthorizeRedirect(RightsConfig.CONST_股票报备, ToolBarConfig.CONST_NotButton, true)] public ActionResult Check(int id, int check) { var model = new StockAuditOrRejectDto { Id = id, Check = check }; return View(model); } [HttpPost] public ActionResult Check(int id, string remark, int check) { var ret = new retMsg { result = true, retcode = 200 }; var secret = ConfigurationManager.AppSettings["StockPoolSecret"]; var url = ConfigurationManager.AppSettings["StockPoolUrlNew"]; var authorization = ConfigurationManager.AppSettings["StockPoolAuthorization"]; try { StockAuditOrRejectDto dto = new StockAuditOrRejectDto { Id = id, Reason = remark, Check = check, CheckUserName = UserName, }; BuildPostBody(dto, secret); var json = JsonConvert.SerializeObject(dto, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() }); var result = Utility.PostAjaxData($"{url}/stockpool/api/stock/pool/heguiAudit", json, authorization, true); var data = JsonHelper.FromJson>(result); //_stockBL.CheckStockPools(model); } catch (Exception ex) { ret = new retMsg { result = false, retcode = 200, retmsg = ex.Message }; } return Json(ret, JsonRequestBehavior.AllowGet); } /// /// 行业下拉框 /// /// public DropSelectList BuildInduNameList() { try { var appId = ConfigurationManager.AppSettings["StockPoolAppId"]; var secret = ConfigurationManager.AppSettings["StockPoolSecret"]; ApiSignHelper apiSignHelper = new ApiSignHelper(appId, secret); var url = ConfigurationManager.AppSettings["StockPoolUrl"] + "/api/Stock/GetDropSelectList"; Dictionary param = new Dictionary(); var ret = apiSignHelper.GetApi(url, param); DropSelectList dropSelectList = JsonConvert.DeserializeObject(ret.Data); return dropSelectList; } catch (Exception ex) { LogHelper.Error($"获取下拉框失败{ex.Message}"); return new DropSelectList(); } } private void BuildPostBody(StockAuditOrRejectDto dto, string key) { var nowTime = DateTime.Now; var timestamp = GetTimeStampByTime(nowTime); dto.Timestamp = timestamp; dto.CheckTime = nowTime.ToString("yyyy-MM-dd HH:mm:ss"); StringBuilder beforeSignStr = new StringBuilder(); beforeSignStr.Append(dto.Id) .Append(dto.Check) .Append(dto.CheckUserName) .Append(dto.CheckTime) .Append(dto.Timestamp); dto.Sign = HmacMD5(beforeSignStr.ToString(), key); } public long GetTimeStampByTime(DateTime nowTime) { TimeSpan ts = nowTime - new DateTime(1970, 1, 1, 8, 0, 0, 0); return long.Parse(Convert.ToInt64(ts.TotalSeconds).ToString()); } public string HmacMD5(string ciphertext, string accessKey) { Encoding utf = new UTF8Encoding(); HMACMD5 hmac = new HMACMD5(utf.GetBytes(accessKey)); byte[] hashValue = hmac.ComputeHash(utf.GetBytes(ciphertext)); return Convert.ToBase64String(hashValue); } public class SearchStockPoolNewPageDto { /// /// 审核状态,10专业审核中,20合规审核中,99审核通过,-1审核驳回 /// public int? CheckStatus { get; set; } public string ChosenDateEnd { get; set; } public string ChosenDateStart { get; set; } /// /// 入池方式 1-人工 2-自动 /// public int? ChosenType { get; set; } /// /// 申请人 /// public string CreateUser { get; set; } /// /// 分页,页数 /// public int PageNum { get; set; } /// /// 分页,每页条数 /// public int PageSize { get; set; } /// /// 产品线 1001:东方股票,1002:六合,1004:懂牛 /// public string PlatformId { get; set; } /// /// 产品线 1001:东方股票,1002:六合,1004:懂牛 /// public List PlatformIds { get { return !string.IsNullOrEmpty(PlatformId) ? PlatformId.Split(',').ToList() : null; } } public string InduName { get; set; } /// /// 在池状态,0-在池,1-出池 /// public int? Status { get; set; } /// /// 股票代码 /// public string StockCode { get; set; } /// /// 股票名称 /// public string StockName { get; set; } } public class StockPoolResult { public int Total { get; set; } public List Rows { get; set; } public int Code { get; set; } public string Msg { get; set; } } public class StockPoolResultRow { /// /// Id /// public int Id { get; set; } /// /// 入选价 /// public decimal ChosenPrice { get; set; } /// /// 入选日期 /// public string ChosenDate { get; set; } /// /// 入选理由 /// public string ChosenReason { get; set; } /// /// 入选方式 1-人工 2-自动 /// public int ChosenType { get; set; } /// /// 入选方式 /// public string ChosenTypeStr { get { return ChosenType == 1 ? "人工报备" : ChosenType == 2 ? "自动报备" : "--"; } } /// /// 审核流程状态,10专业审核中,20合规审核中,99审核通过,-1审核驳回 /// public int CheckStatus { get; set; } /// /// 审核流程状态 /// public string CheckedStr { get { return CheckStatus == 10 ? "专业审核中" : CheckStatus == 20 ? "合规审核中" : CheckStatus == 99 ? "审核通过" : CheckStatus == -1 ? "审核驳回" : "--"; } } /// /// 申请人 /// public string CreateUser { get; set; } /// /// 报备时间 /// public string CreateTime { get; set; } /// /// 在池状态,0正常 1禁用 /// public int? Status { get; set; } /// /// 在池状态,0正常 1禁用 /// public string StatusStr { get { return Status == null ? "--" : Status == 0 ? "正常" : Status == 1 ? "禁用" : "--"; } } /// /// 所属行业 /// public string InduName { get; set; } /// /// 产品线 1001:东方股票,1002:六合,1004:懂牛 /// public int? PlatformId { get; set; } /// /// 产品线 /// public string Platform => PlatformId == 1001 ? "东方股票" : PlatformId == 1002 ? "六合" : PlatformId == 1004 ? "懂牛" : PlatformId == 1005 ? "聚牛" : PlatformId == 2001 ? "短线王" : "--"; /// /// 行业代码 /// public string InnerCode { get; set; } /// /// 推荐仓位下限 /// public decimal? Price { get; set; } /// /// 股票代码 /// public string StockCode { get; set; } /// /// 股票名称 /// public string StockName { get; set; } } public class StockPoolLog { public int Id { get; set; } /// /// 操作事项类型 /// public int OperateType { get; set; } /// /// 操作事项类型 /// public string OperateTypeStr { get { return OperateType == 0 ? "提交申请" : OperateType == 1 ? "专业审核" : OperateType == 2 ? "合规审核" : OperateType == 3 ? "入池" : OperateType == 4 ? "出池" : "--"; } } /// /// 股票报备id /// public int StockReportId { get; set; } /// /// 触发类型,0-人工,1-自动 /// public int TriggerType { get; set; } /// /// 触发类型 /// public string TriggerTypeStr { get { return TriggerType == 0 ? "人工" : TriggerType == 1 ? "自动" : "--"; } } /// /// 操作结果 /// public string OperateResult { get; set; } /// /// 操作说明 /// public string OperateRemark { get; set; } /// /// 操作人姓名 /// public string CreateName { get; set; } /// /// 操作人id /// public int? CreateBy { get; set; } /// /// 操作时间 /// public string CreateTime { get; set; } } public class StockAuditOrRejectDto { /// /// 报备id /// public int? Id { get; set; } /// /// 审核状态 -1审核拒绝,99审核通过 /// public int Check { get; set; } /// /// 审核人 /// public string CheckUserName { get; set; } /// /// 审核理由 /// public string Reason { get; set; } /// /// 审核时间 /// public string CheckTime { get; set; } /// /// HmacMD5签名 /// public string Sign { get; set; } /// /// 毫秒时间戳 /// public long Timestamp { get; set; } } } }