Files
zszq-trs/YLErpWeb/Controllers/AccountOpeningProcessController.cs
T
tengyufan 8afd449c40 feat(ClientBlack): 新增客户黑名单审批流程
- 黑名单新增、删除、批量导入、批量移出在配置审批节点后,审批通过才生效
- 新增黑名单待提交后可提交审批;仅首节点未审批时可撤回,进入后续节点禁止撤回
- 增加黑名单审批列表、审批弹窗、审批操作日志及状态筛选
- 支持审批配置中的“黑名单审批”流程及对应菜单、模块权限、操作权限
- 黑名单审批中禁止同名记录覆盖备注;已在黑名单中的同名导入会明确提示本次将修改备注
- 未配置审批节点时保持原有直接生效行为
- 增加黑名单审批状态机单测,39/39 通过
- 修正撤回全部失败时仍提示“撤回审批成功”的问题
2026-08-13 17:21:04 +08:00

237 lines
8.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Org.BouncyCastle.Ocsp;
using Newtonsoft.Json;
using YLErp.Helpers;
using YLErp.DBModels.Enums;
using YLErp.Model.Enum;
using YLErp.Modules.AppModule;
using YLErp.Modules.BasicDataModule;
using YLErp.Modules.ClientModule;
using YLErp.Modules.SwapModule;
using YLErp.Modules.SystemModule;
namespace YLErp.Web.Controllers
{
public class AccountOpeningProcessController : BaseController
{
public AccountOpeningProcessController()
{
}
[MyAuthorize("系统管理-审批流程")]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult GetRolesOption()
{
var roles = (from r in DbContextFactory.GetErpBaseContext().Roles select r).ToList();
var list = new List<SelectListItem> {
new SelectListItem() { Value = "", Text = @"无" }
};
foreach (var role in roles)
{
var item = new SelectListItem
{
Value = role.Id.ToString(),
Text = role.Name
};
list.Add(item);
}
return Json(list);
}
[HttpPost]
public ActionResult AddProcess(string type, List<ApprovalProcessAddRequest> data)
{
if ((type == "TradeProcess" || type == "CloseProcess") && data != null && data.Count > 0)
{
foreach (var item in data)
{
if (item.ApprovalRules == null)
{
item.ApprovalRules = "";
}
}
}
// 校验节点触发条件 JSON 格式,避免非法数据入库
if (data != null)
{
foreach (var item in data)
{
if (!string.IsNullOrWhiteSpace(item.triggerCondition))
{
try
{
JsonConvert.DeserializeObject<ConditionExpressionConfig>(item.triggerCondition);
}
catch
{
return JsonError("触发条件格式非法,请检查括号与条件是否完整");
}
}
}
}
new ApprovalProcessService(CurUser).AddProcess(type, data);
return JsonSuccess("设置成功");
}
[HttpPost]
public ActionResult GetProcess()
{
var list = yldb.approvalprocess.ToList();
var openProcess = list.Where(s => s.processType == "OpenProcess").OrderBy(s => s.order).ThenBy(s => s.parentNode).ThenBy(s => s.node).ToList();
var tradeProcess = list.Where(s => s.processType == "TradeProcess").OrderBy(s => s.order).ThenBy(s => s.parentNode).ThenBy(s => s.node).ToList();
// 需求②:了结/平仓/行权审批流程
var closeProcess = list.Where(s => s.processType == "CloseProcess").OrderBy(s => s.order).ThenBy(s => s.parentNode).ThenBy(s => s.node).ToList();
var creditProcess = list.Where(s => s.processType == "CreditProcess").OrderBy(s => s.order).ToList();
var outCashProcess = list.Where(s => s.processType == "OutCashProcess").OrderBy(s => s.order).ToList();
var clientProcess = list.Where(s => s.processType == "ClientProcess").OrderBy(s => s.order).ThenBy(s => s.parentNode).ThenBy(s => s.node).ToList();
var clientBlackProcess = list.Where(s => s.processType == "ClientBlackProcess").OrderBy(s => s.order).ThenBy(s => s.parentNode).ThenBy(s => s.node).ToList();
return Json(new { OpenProcess = openProcess, TradeProcess = tradeProcess, CloseProcess = closeProcess, CreditProcess = creditProcess, OutCashProcess= outCashProcess,ClientProcess = clientProcess, ClientBlackProcess = clientBlackProcess });
}
[HttpPost]
public ActionResult SubmitProcess(int clientId)
{
var message = new ClientProcessService(CurUser).SubmitProcess(clientId, out var client);
if (client.ProcessStatus=="已开户")
{
new EtradingRuleService(CurUser).SendEtradingRuleToKafka(client.Number);
}
return JsonSuccess(message, client);
}
#region 簿记审批
[MyAuthorize("系统管理-资产单元")]
public ActionResult ApprovalAsset()
{
return View();
}
public ActionResult ApprovalGradeEdit(string enid = null)
{
if (enid == null)
{
return View(new ApprovalGrade());
}
var intid = DecryptInt(enid);
var approvalgrade = yldb.approvalGrade.Find(intid);
return View(approvalgrade);
}
public JsonResult ApprovalGradeEditJson(ApprovalGrade req)
{
if (!string.IsNullOrEmpty(req.EncryptId))
{
req.id = DecryptInt(req.EncryptId);
}
var r = new ApprovalGradeDataService(CurUser).SaveApprovalGrade(req);
return JsonSuccess("更新成功", r);
}
public JsonResult deleteApprovalGrade(string enid)
{
var intid = DecryptInt(enid);
new ApprovalGradeDataService(CurUser).deleteApprovalGrade(intid);
return JsonSuccess("删除成功");
}
public JsonResult ApprovalGradeQuery(AssetUnitRequest req)
{
var sList = new ApprovalGradeDataService(CurUser).SearchList(req);
return Json(sList);
}
public static List<SelectListItem> GetRoles()
{
var rets = new List<SelectListItem>();
var roles = ApprovalGradeDataService.getAllRoles();
foreach (var role in roles)
{
var ret = new SelectListItem();
ret.Text = role.Name;
ret.Value = role.Id.ToString();
rets.Add(ret);
}
return rets;
}
#endregion
[MyAuthorize("客户管理-客户查看")]
public ActionResult clientList()
{
return View("clientListV2");
}
public ActionResult clientListV2()
{
return View();
}
/// <summary>
/// 更新客户基础信息模板
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult UpdateClientInfoTemplate()
{
new ClientTemplateImportService(CurUser).UpdateClientInfoTemplate();
//return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8", "客户基本信息导入模板.xlsx");
return JsonSuccess("");
}
[HttpPost]
public ActionResult clientQueryForDown(ClientReq req)
{
var sList = new ClientQueryService(CurUser).SearchOpeningProcessListForDown(req);
sList.ForEach(x =>
{
if (!PS.Config.Is格林大华)
{
if (!string.IsNullOrEmpty(x.CustomerManagerId))
{
if (x.CustomerManagerId.Contains(","))
{
List<string> managerNames = new List<string>();
var CustomerManagerIds = x.CustomerManagerId.Split(',').ToList();
CustomerManagerIds.ForEach(a =>
{
var manager = UserBLL.GetById(Convert.ToInt32(a));
if (manager != null)
{
managerNames.Add(manager.Name);
}
});
x.CustomerManager = managerNames.Any() ? string.Join(",", managerNames) : string.Empty;
}
else
{
var manager = UserBLL.GetById(Convert.ToInt32(x.CustomerManagerId));
x.CustomerManager = manager == null ? "" : manager.Name;
}
}
}
x.CustomerNatureName = x.CustomerNature == null ? "" : ((CustomerNatureEnum)x.CustomerNature.Value).ToString();
x.SalesDepartment = x.SalesDepartmentId == null ? "" : DepartmentsController.GetDepartmentById(x.SalesDepartmentId.Value)?.Name ?? "";
x.Phone = x.Phone != null ? x.Phone.Replace(",", "") : "";
});
return Json(sList);
}
}
}