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

155 lines
6.0 KiB
C#

using YLErp.Modules.ClientModule;
namespace YLErp.Web.Controllers
{
public class clientblackController : BaseController
{
public static List<SelectListItem> GetClientBlackStates()
{
return new List<SelectListItem>
{
new() { Text = client_black.未提交, Value = client_black.未提交 },
new() { Text = client_black.新增审批中, Value = client_black.新增审批中 },
new() { Text = client_black.新增已拒绝, Value = client_black.新增已拒绝 },
new() { Text = client_black.已加入, Value = client_black.已加入 },
new() { Text = client_black.删除审批中, Value = client_black.删除审批中 },
new() { Text = client_black.删除已拒绝, Value = client_black.删除已拒绝 }
};
}
[MyAuthorize("客户管理-黑名单客户")]
public ActionResult clientblacklist()
{
return View();
}
[HttpPost]
public JsonResult clientblacklistQuery(ClientBlackReq req)
{
var sList = new ClientBlackService(CurUser).SearchList(req);
return Json(sList);
}
public ActionResult clientblackAdd(int id = 0)
{
var clientBlack = DataCacheProvider.GetClientBlackDataSource().GetData(id) ?? new client_black();
return View(clientBlack);
}
public JsonResult ClientBlackAddJson(client_black client, bool checkStatus)
{
if (string.IsNullOrEmpty(client.Name))
{
return JsonError("客户名称不能为空");
}
new ClientBlackService(CurUser).AddClientBlack(new[] { client }, checkStatus);
return JsonSuccess("", client);
}
/// <summary>
/// 导入黑名单
/// </summary>
public ActionResult UploadSettlementBill(IFormFile file, bool checkStatus)
{
try
{
if (file == null || string.IsNullOrWhiteSpace(file.FileName))
{
return JsonError("未获取上传文件");
}
var fileExtension = Path.GetExtension(file.FileName);
using var inputStream = file.OpenReadStream();
new ClientBlackService(CurUser).ImportxlsxClientBlack(inputStream, checkStatus);
return JsonSuccess("导入成功");
}
catch (Exception ex)
{
LogFactory.GetLogger("导入黑名单").Error("导入黑名单出错", ex);
return JsonError(ex.Messages());
}
}
public ActionResult DeleteClientBlack(string ids)
{
try
{
var datalist = ids.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
var service = new ClientBlackService(CurUser);
service.DeleteClientBlack(datalist);
return JsonSuccess(service.ProcessList().Any() ? "已经提交删除审批!" : "删除成功");
}
catch (Exception ex)
{
return JsonError(ex.GetBaseException().Message);
}
}
[MyAuthorize("客户管理-黑名单审批")]
public ActionResult clientblackApproval()
{
return View();
}
[HttpPost, MyAuthorize("客户管理-黑名单审批")]
public JsonResult clientblackApprovalQuery(ClientBlackReq req)
{
return Json(new ClientBlackService(CurUser).ClientBlackApprovalQuery(req));
}
[HttpPost, MyAuthorize("客户管理-黑名单客户提交审批")]
public JsonResult clientblackSubmit(string ids)
{
var idList = ids.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
new ClientBlackService(CurUser).SubmitApprovalClientBlack(idList);
return JsonSuccess("提交审批成功");
}
[HttpPost, MyAuthorize("客户管理-黑名单客户撤回提交审批")]
public JsonResult clientblackWithdraw(string ids)
{
var idList = ids.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
new ClientBlackService(CurUser).WithdrawApprovalClientBlack(idList, out var withdrawCount, out var msg);
if (withdrawCount == 0)
{
return JsonError(string.IsNullOrWhiteSpace(msg)
? "所选记录当前状态无法撤回审批"
: $"以下记录已进入后续节点无法撤回:{msg}");
}
return JsonSuccess("撤回审批成功" + (string.IsNullOrWhiteSpace(msg) ? "" : $",以下记录已进入后续节点无法撤回:{msg}"));
}
[HttpPost, MyAuthorize("客户管理-黑名单审批")]
public JsonResult Auditclientblack(ClientBlackAuditReq req)
{
new ClientBlackService(CurUser).AuditClientBlack(req);
return JsonSuccess("审批成功");
}
[MyAuthorize("客户管理-黑名单审批")]
public ActionResult clientblackView(string enid)
{
var id = DataProtectHelper.DecryptInt(enid);
var item = clientDB.client_black.FirstOrDefault(x => x.id == id);
return View(item);
}
[MyAuthorize("客户管理-黑名单客户")]
public ActionResult clientblackLogList(int id)
{
var logs = clientDB.client_blacklog.Where(x => x.ClientBlackId == id)
.OrderByDescending(x => x.id)
.ToList();
return View(logs);
}
/// <summary>
/// 黑名单导出
/// </summary>
[HttpPost]
public object ExportClientBlack(ClientBlackReq req)
{
var bytes = new ClientBlackService(CurUser).ExportClientBlack(req);
return File(bytes, xlsxMimeType, $"黑名单导出-{DateTime.Now:yyyy-MM-dd}.xlsx");
}
}
}