using YLErp.Enums; using YLErp.Modules.ClientModule; using YLErp.Modules.SystemModule; namespace YLErp.Web.Controllers { public class client_margin_templateController : BaseController { //入口迁移(2026-08-27):页面降级为"数据管理-预付金模板V2"第四个tab,权限归并到宿主页 [MyAuthorize("基础参数管理-预付金模板V2")] public ActionResult client_margin_templateList() { return View(); } [MyAuthorize("基础参数管理-预付金模板V2")] public ActionResult client_margin_templateEdit(int id) { var marginTemplates = yldb.margin_template_v2.Where(x => x.IsDefault && x.IsForClient && x.IsValid == true).ToList(); marginTemplates.ForEach(x => x.Details = yldb.margin_template_detail.Where(y => y.MarginTemplateId == x.id).ToList()); ViewBag.MarginTemplates = marginTemplates; var template = yldb.client_margin_template.Find(id); if(template == null) { template = new client_margin_template() { ValueDate = valuedateBLL.ValueDate }; ViewBag.MarginTemplate = new margin_template_v2() { RuleType = -1 }; } else { var marginTemplate = yldb.margin_template_v2.Find(template.MarginTemplateId); ViewBag.MarginTemplate = marginTemplate; } return View(template); } public JsonResult saveClientMarginTemplate(client_margin_template clientMarginTemplate) { try { if (clientMarginTemplate.MarginTemplateId <= 0) { throw new Exception("请选择有效的预付金模板"); } var marginTemplate = yldb.margin_template_v2.Find(clientMarginTemplate.MarginTemplateId); var marginDetail = yldb.margin_template_detail.Where(x => x.MarginTemplateId == marginTemplate.id && x.ValueDate <= clientMarginTemplate.ValueDate).OrderByDescending(x => x.ValueDate).FirstOrDefault(); if (marginDetail == null && (marginTemplate.RuleType != (int)MarginRuleTypeEnum.无预付金 && marginTemplate.RuleType != (int)MarginRuleTypeEnum.自动赎回买入预付金规则 && marginTemplate.RuleType != (int)MarginRuleTypeEnum.含赔付预付金计算规则 && marginTemplate.RuleType != (int)MarginRuleTypeEnum.保底预付金规则)) { throw new Exception(string.Format("[{0}]不在{1}有效期内", clientMarginTemplate.ValueDate.ToString("yyyy-MM-dd"), marginTemplate.Name)); } //一套规则多套默认参数的互斥验证 var existClientMarginTemplateOther = yldb.client_margin_template.Where(x => ((x.ClientId != 0 && x.ClientId == clientMarginTemplate.ClientId) || (x.ClientLevel != "" && x.ClientLevel == clientMarginTemplate.ClientLevel)) && x.ValueDate == clientMarginTemplate.ValueDate && x.id != clientMarginTemplate.id); var existMarginTemplateIdsOther = existClientMarginTemplateOther.Select(x => x.MarginTemplateId).ToArray(); var msg = ""; if(clientMarginTemplate.ClientLevel == "") { msg = "客户名称"; } else if(clientMarginTemplate.ClientId == 0) { msg = "客户等级"; } if (marginTemplate.DefaultParameterType != 0) { //验证不同规则是否已经存在该交易类型 var marginTemplateDefault = yldb.margin_template_v2.Where(x => existMarginTemplateIdsOther.Contains(x.id) && x.RuleType != marginTemplate.RuleType); var existTradeTypes = marginTemplateDefault.Select(x => x.TradeTypes).ToList(); var tradeTypes = new List(); existTradeTypes.ForEach(x => tradeTypes.AddRange(x.Split(','))); //验证相同规则相同的默认参数类型,是否包含相同的适用结构 var sameRuleParameterRecord = yldb.margin_template_v2.FirstOrDefault(x => existMarginTemplateIdsOther.Contains(x.id) && x.RuleType == marginTemplate.RuleType && x.DefaultParameterType == marginTemplate.DefaultParameterType); if (sameRuleParameterRecord != null) { tradeTypes.AddRange(sameRuleParameterRecord.TradeTypes.Split(',')); } tradeTypes.ForEach(x => { if (marginTemplate.TradeTypes.Contains(x)) { throw new Exception($"同一天同一{msg}默认规则不能有相同的适用结构:" + x); } }); } else { var marginTemplateDefault = yldb.margin_template_v2.Where(x => existMarginTemplateIdsOther.Contains(x.id)); var existTradeTypes = marginTemplateDefault.Select(x => x.TradeTypes).ToList(); List tradeTypes = new List(); existTradeTypes.ForEach(x => tradeTypes.AddRange(x.Split(','))); tradeTypes.ForEach(x => { if (marginTemplate.TradeTypes.Contains(x)) { throw new Exception($"同一天同一{msg}默认规则不能有相同的适用结构:" + x); } }); } if (clientMarginTemplate.id > 0) { var template = yldb.client_margin_template.Find(clientMarginTemplate.id); template.ClientId = clientMarginTemplate.ClientId; template.MarginTemplateId = clientMarginTemplate.MarginTemplateId; template.ValueDate = clientMarginTemplate.ValueDate; template.OptDate = DateTime.Now; template.OptId = CurUser.UserId; template.OptName = CurUser.UserName; template.ClientLevel = clientMarginTemplate.ClientLevel; } else { clientMarginTemplate.OptDate = DateTime.Now; clientMarginTemplate.OptId = CurUser.UserId; clientMarginTemplate.OptName = CurUser.UserName; yldb.client_margin_template.Add(clientMarginTemplate); } yldb.SaveChanges(); return JsonSuccess("更新成功"); } catch (Exception ex) { return JsonError(ex.Message); } } public JsonResult deleteClientMarginTemplate(int id) { try { var template = yldb.client_margin_template.Find(id); if(template != null) { yldb.client_margin_template.Remove(template); yldb.SaveChanges(); } return JsonSuccess("删除成功"); } catch (Exception ex) { return JsonError(ex.Message); } } /// /// 获取交易预付金规则列表 /// [HttpPost] public JsonResult clientMarginTemplateQuery(ClientMarginTemplateReq req) { var sList = new ClientMarginTemplateService(CurUser).SearchClientMarginTemplateList(req); return Json(sList); } /// /// 获取客户等级列表 /// /// public JsonResult GetAllClientLevels() { try { var clientLevels = ClientDataModelV1.GetAllclientlevel(); return JsonSuccessData(clientLevels); } catch (Exception ex) { return JsonError(ex.Message); } } /// /// 获取所有客户 /// /// public JsonResult GetAllClients() { try { var clients = ClientDataModelV1.GetAllClient(); return JsonSuccessData(clients); } catch (Exception ex) { return JsonError(ex.Message); } } } }