218 lines
9.2 KiB
C#
218 lines
9.2 KiB
C#
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);
|
|
//绑定模板不在上方下拉筛选范围内(如已失效)时,Find 得到的是未挂 Details 的新实例,右栏只读回显会空白
|
|
if (marginTemplate.Details.Count == 0)
|
|
{
|
|
marginTemplate.Details = yldb.margin_template_detail.Where(y => y.MarginTemplateId == marginTemplate.id).ToList();
|
|
}
|
|
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);
|
|
if (marginTemplate == null)
|
|
{
|
|
throw new Exception("找不到有效的预付金模板");
|
|
}
|
|
|
|
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 existingTemplateIds = existClientMarginTemplateOther
|
|
.Select(x => x.MarginTemplateId)
|
|
.ToArray();
|
|
var existingMarginTemplates = yldb.margin_template_v2
|
|
.Where(x => existingTemplateIds.Contains(x.id))
|
|
.ToList()
|
|
.Where(x => margin_template_v2.AreBookScopesOverlapping(x.BookIds, marginTemplate.BookIds))
|
|
.ToList();
|
|
var msg = "";
|
|
if(clientMarginTemplate.ClientLevel == "")
|
|
{
|
|
msg = "客户名称";
|
|
}
|
|
else if(clientMarginTemplate.ClientId == 0)
|
|
{
|
|
msg = "客户等级";
|
|
}
|
|
|
|
if (marginTemplate.DefaultParameterType != 0)
|
|
{
|
|
//验证不同规则是否已经存在该交易类型
|
|
var marginTemplateDefault = existingMarginTemplates
|
|
.Where(x => x.RuleType != marginTemplate.RuleType)
|
|
.ToList();
|
|
var tradeTypes = margin_template_v2.GetOverlappingTradeTypes(marginTemplateDefault, marginTemplate.BookIds).ToList();
|
|
|
|
//验证相同规则相同的默认参数类型,是否包含相同的适用结构
|
|
var sameRuleParameterRecords = existingMarginTemplates
|
|
.Where(x => x.RuleType == marginTemplate.RuleType && x.DefaultParameterType == marginTemplate.DefaultParameterType)
|
|
.ToList();
|
|
tradeTypes.AddRange(margin_template_v2.GetOverlappingTradeTypes(sameRuleParameterRecords, marginTemplate.BookIds));
|
|
|
|
tradeTypes.ForEach(x =>
|
|
{
|
|
if (marginTemplate.TradeTypes.Contains(x))
|
|
{
|
|
throw new Exception($"同一天同一{msg}默认规则不能有相同的适用结构:" + x);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
var marginTemplateDefault = existingMarginTemplates;
|
|
var tradeTypes = margin_template_v2.GetOverlappingTradeTypes(marginTemplateDefault, marginTemplate.BookIds).ToList();
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取交易预付金规则列表
|
|
/// </summary>
|
|
[HttpPost]
|
|
public JsonResult clientMarginTemplateQuery(ClientMarginTemplateReq req)
|
|
{
|
|
var sList = new ClientMarginTemplateService(CurUser).SearchClientMarginTemplateList(req);
|
|
return Json(sList);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取客户等级列表
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public JsonResult GetAllClientLevels()
|
|
{
|
|
try
|
|
{
|
|
|
|
var clientLevels = ClientDataModelV1.GetAllclientlevel();
|
|
|
|
return JsonSuccessData(clientLevels);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonError(ex.Message);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取所有客户
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public JsonResult GetAllClients()
|
|
{
|
|
try
|
|
{
|
|
var clients = ClientDataModelV1.GetAllClient();
|
|
|
|
return JsonSuccessData(clients);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return JsonError(ex.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|