Files
number_zj/20220330_Vote/Ewide.RoadFlow/Serivce/FlowDesign/FlowDesignSerivce.cs
2022-03-30 17:54:33 +08:00

1281 lines
48 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 System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ewide.Core;
using Ewide.RoadFlowLite.Utility;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Furion.Localization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Localization;
using Newtonsoft.Json.Linq;
using RoadFlow.Data;
using RoadFlow.Utility;
using SqlSugar;
namespace Ewide.RoadFlowLite.Serivce.FlowDesign
{
/// <summary>
/// 工作流设计器服务
/// </summary>
[Route("/api/roadflow/FlowDesign/")]
[ApiDescriptionSettings("RoadFlow")]
public class FlowDesignSerivce:IFlowDesignService ,IDynamicApiController, ITransient
{
private readonly IDictionary _dicRepo;
private readonly IRepository<SysUser> _sysUserRepo;
private readonly IFlow _flowRepo;
private readonly IUserManager _userManager;
private readonly IFlowTask _flowTaskRepo;
private readonly IFlowDynamic _flowDynamicRepo;
private readonly IFlowButton _flowButtonRepo;
private readonly ILog _logRepo;
private readonly IFlowApiSystem _flowApiSystemRepo;
private readonly RoadFlow.Data.IDbConnection _dbConnectionRepo;
//private readonly IStringLocalizer _localizer=L.Text;
private readonly IApplibrary _applibrary;
private readonly IFlowEntrust _flowEntrust;
private readonly IUserDummy _userDummy;
private readonly IFlowComment _flowComment;
public FlowDesignSerivce(IDictionary dicRepo,
IRepository<SysUser> sysUserRepo,
IFlow flowRepo,
IUserManager manager,
IFlowTask flowTaskRepo,
IFlowDynamic flowDynamicRepo,
IFlowButton flowButtonRepo,
ILog logRopo,
IFlowApiSystem flowApiSystemRepo,
RoadFlow.Data.IDbConnection dbConnectionRepo,
IApplibrary applibrary,
IFlowEntrust flowEntrust,
IUserDummy userDummy,
IFlowComment flowComment
)
{
_dicRepo = dicRepo;
_sysUserRepo = sysUserRepo;
_flowRepo = flowRepo;
_flowTaskRepo = flowTaskRepo;
_userManager = manager;
_flowDynamicRepo = flowDynamicRepo;
_flowButtonRepo = flowButtonRepo;
_logRepo = logRopo;
_flowApiSystemRepo = flowApiSystemRepo;
_dbConnectionRepo = dbConnectionRepo;
_applibrary = applibrary;
_flowEntrust = flowEntrust;
_userDummy = userDummy;
_flowComment = flowComment;
}
[HttpGet("hello")]
[AllowAnonymous]
public dynamic Hello()
{
string hello = "hello".DESEncrypt();
return hello + ":" + hello.DESDecrypt();
}
#region
/// <summary>
/// 得到按钮列表
/// </summary>
/// <returns></returns>
[HttpPost("GetButtonList")]
public dynamic GetButtonList([FromBody] JObject args)
{
string title = args.GetJsonValue("title");
var buttons = title.IsNullOrWhiteSpace()
? _flowButtonRepo.GetAll()
: _flowButtonRepo.GetAll().FindAll(p => p.Title.ContainsIgnoreCase(title.Trim()));
JArray jArray = new JArray();
//string lang = RoadFlow.Utility.Tools.GetCurrentLanguage(HttpContext);
foreach (var button in buttons)
{
JObject jObject = new JObject()
{
{ "Id", button.Id },
//{ "Title", flowButton.GetLanguageTitle(button, out string note, lang) },
{ "Title", button.Title },
{ "Ico", button.Ico },
//{ "Note", note },
{ "Note", button.Note },
{ "Sort", button.Sort },
};
jArray.Add(jObject);
}
return jArray;
}
/// <summary>
/// 得到按钮实体
/// </summary>
/// <returns></returns>
[HttpGet("GetButton")]
public dynamic GetButton(string id)
{
//string id = args.GetJsonValue("id", isThrowExp: true);
if (!id.IsGuid(out Guid guid))
{
return null;
}
var model =_flowButtonRepo.GetOneById(id);
if (model == null)
{
return null;
}
return model;
}
/// <summary>
/// 保存按钮
/// </summary>
/// <param name="buttonModel"></param>
/// <returns></returns>
[HttpPost("SaveButton")]
public string SaveButton([FromBody] JObject args)
{
string id = args.GetJsonValue("id");
var buttonModel = new RoadFlow.Model.rf_flowbutton
{
Ico = args.GetJsonValue("Ico"),
Note = args.GetJsonValue("Note"),
Script = args.GetJsonValue("Script"),
Sort = args.GetJsonIntValue("Sort") ?? 0,
Title = args.GetJsonValue("Title"),
};
if (id.IsGuid(out Guid buttonId))
{
buttonModel.Id = id;
var oldModel = _flowButtonRepo.GetOneById(id);
_flowButtonRepo.Update(buttonModel); ;
_logRepo.Add("修改了流程按钮-" + buttonModel.Title, CurrentUserId: _userManager.UserId, type: LogType., oldContents: oldModel.ToString(), newContents: buttonModel.ToString());
}
else
{
buttonModel.Id = GuidExtensions.NewGuid().ToString();
_flowButtonRepo.Add(buttonModel);
_logRepo.Add("添加了流程按钮-" + buttonModel.Title, CurrentUserId: _userManager.UserId, buttonModel.ToString(), LogType.);
}
//return RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["SaveSuccessfully"].Value);
return "保存成功";
}
/// <summary>
/// 删除按钮
/// </summary>
/// <returns></returns>
[HttpPost("DeleteButton")]
public string DeleteButton([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids", isThrowExp: true);
List<RoadFlow.Model.rf_flowbutton> flowButtons = new();
foreach (string id in ids.Split(','))
{
if (!id.IsGuid(out Guid guid))
{
continue;
}
var buttonModel = _flowButtonRepo.GetOneById(id);
if (null == buttonModel)
{
continue;
}
flowButtons.Add(buttonModel);
}
_flowButtonRepo.Delete(flowButtons);
_logRepo.Add("删除了流程按钮", CurrentUserId: _userManager.UserId, flowButtons.Serialize(), LogType.);
return "共删除 "+flowButtons.Count+" 个按钮";
//_localizer["TotalDelete"].Value + flowButtons.Count.ToString() + _localizer["ButtonCount"].Value;
}
/// <summary>
/// 得到按钮
/// </summary>
/// <returns></returns>
[HttpGet("GetButtons")]
public dynamic GetButtons()
{
var buttons = _flowButtonRepo.GetAll();
JArray jArray = new JArray();
foreach (var button in buttons)
{
jArray.Add(new JObject() {
{ "id", button.Id.ToString() },
{ "title", button.Title },
{ "ico", button.Ico },
{ "note", button.Note},
{ "current", false }
});
}
return jArray;
}
#endregion
#region API系统管理
/// <summary>
/// 得到api系统combox选项
/// </summary>
/// <returns></returns>
[HttpGet("GetApiSystemOptions")]
public dynamic GetApiSystemOptions()
{
var systems = _flowApiSystemRepo.GetAll();
JArray jArray = new JArray();
foreach (var system in systems)
{
jArray.Add(new JObject()
{
{ "value", system.Id.ToString() },
{ "title", system.Name }
});
}
return jArray;
}
/// <summary>
/// 查询API系统列表
/// </summary>
/// <returns></returns>
[HttpPost("GetApiSystemList")]
public dynamic GetApiSystemList(string title)
{
//string title = Request.Forms("title");
var apiSystems = title.IsNullOrWhiteSpace()
?_flowApiSystemRepo.GetAll()
: _flowApiSystemRepo.GetAll().FindAll(p => p.Name.ContainsIgnoreCase(title.Trim()));
JArray jArray = new JArray();
foreach (var apiSystem in apiSystems.OrderBy(p => p.Sort))
{
JObject jObject = new JObject()
{
{ "Id", apiSystem.Id },
{ "Name", apiSystem.Name },
{ "SystemCode", apiSystem.SystemCode },
{ "SystemIP", apiSystem.SystemIP },
{ "Note", apiSystem.Note },
{ "Sort", apiSystem.Sort },
};
jArray.Add(jObject);
}
return jArray;
}
/// <summary>
/// 查询API系统
/// </summary>
/// <returns></returns>
[HttpGet("GetApiSystem")]
public dynamic GetApiSystem(string id)
{
//string id = Request.Querys("id");
if (!id.IsGuid(out Guid guid))
{
return new JObject();
}
var apiModel = _flowApiSystemRepo.GetOneById(id);
if (apiModel == null)
{
return new JObject();
}
return apiModel.ToJObject();
}
/// <summary>
/// 保存API系统
/// </summary>
/// <param name="flowApiSystemModel"></param>
/// <returns></returns>
[HttpPost("SaveApiSystem")]
public string SaveApiSystem([FromBody] RoadFlow.Model.rf_flowapisystem flowApiSystemModel)
{
//RoadFlow.Business.FlowApiSystem flowApiSystem = new RoadFlow.Business.FlowApiSystem();
string id = flowApiSystemModel.Id;//Request.Querys("id");
if (id.IsGuid(out Guid systemId))
{
var oldModel = _flowApiSystemRepo.GetOneById(id);
if (oldModel == null)
throw Oops.Oh("该id不存在");
_flowApiSystemRepo.Update(flowApiSystemModel);
_logRepo.Add("修改了API系统-" + flowApiSystemModel.Name,CurrentUserId:_userManager.UserId, type: LogType., oldContents: oldModel.ToString(), newContents: flowApiSystemModel.ToString());
}
else
{
flowApiSystemModel.Id = GuidExtensions.NewGuid().ToString();
_flowApiSystemRepo.Add(flowApiSystemModel);
_logRepo.Add("添加了API系统-" + flowApiSystemModel.Name,_userManager.UserId, flowApiSystemModel.ToString(), LogType.);
}
return "保存成功";
}
/// <summary>
/// 删除API系统
/// </summary>
/// <returns></returns>
[HttpPost("DeleteApiSystem")]
public string DeleteApiSystem([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids");
List<RoadFlow.Model.rf_flowapisystem> flowApiSystems = new List<RoadFlow.Model.rf_flowapisystem>();
foreach (string id in ids.Split(','))
{
if (!id.IsGuid(out Guid guid))
{
continue;
}
var apiModel = _flowApiSystemRepo.GetOneById(id);
if (null == apiModel)
{
continue;
}
flowApiSystems.Add(apiModel);
}
int count =_flowApiSystemRepo.Delete(flowApiSystems.ToArray());
_logRepo.Add("删除了API接口系统",_userManager.UserId ,flowApiSystems.Serialize(),LogType.);
return "共删除 "+count+" 条记录";
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["TotalDelete"].Value + flowApiSystems.Count.ToString() + localizer["Items"].Value);
}
#endregion
#region
/// <summary>
/// 得到流程列表
/// </summary>
/// <returns></returns>
[HttpPost("GetFlowList")]
public dynamic GetFlowList([FromBody] JObject args)
{
string name = args.GetJsonValue("name");
string typeId = args.GetJsonValue("type");
int? number = args.GetJsonIntValue("number");
int? size = args.GetJsonIntValue("size");
string order = args.GetJsonValue("order");
if (order.IsNullOrWhiteSpace())
{
order = "Name asc";
}
var typeIds = new List<string>();
if (typeId.IsGuid(out Guid typeGuidId))
{
var childsId = _dicRepo.GetAllChildsId(typeId);
typeId = childsId.JoinSqlIn();
typeIds = childsId.Select(a => { return a.ToString(); }).ToList();
}
else
{
typeId = string.Empty;
}
var flows = _flowRepo.GetPagerList(out int total, size ?? 0, number ?? 0, _flowRepo.GetManageFlowIds(_userManager.UserId), name, typeIds, order);
JArray jArray = new JArray();
List<string> uids = new List<string>();
foreach (var flow in flows)
{
JObject jObject = new JObject()
{
{ "Id",flow.Id .ToString() },
{ "Name", flow.Name.ToString() },
{ "CreateDate", flow.CreateDate.ToString().IsDateTime(out DateTime dateTime) ? dateTime.ToDateTimeString() : string.Empty },
{ "CreateUser",flow.CreateUser },
{ "Status", _flowRepo.GetStatusTitle(flow.Status, null) },
{ "Status1",flow.Status.ToString().ToInt() },
};
uids.Add(flow.CreateUser);
jArray.Add(jObject);
}
List<SysUser> users =_sysUserRepo.DetachedEntities.Where(x => uids.Contains(x.Id)).ToList();
foreach (var j in jArray)
{
string uid = j["CreateUser"].ToString();
j["CreateUser"] = users.FirstOrDefault(x => x.Id == uid)?.Name;
}
JObject jObject1 = new JObject
{
{ "total", total },
{ "rows", jArray }
};
return jObject1;
}
/// <summary>
/// 得到流程JSON
/// </summary>
/// <returns></returns>
[HttpPost("GetFlowJson")]
public dynamic GetFlowJson([FromBody] JObject args)
{
string flowId = args.GetJsonValue("flowid", isThrowExp: true);
bool isNew = "1".Equals(args.GetJsonValue("isnew"));
var flowModel = flowId.IsGuid(out Guid flowGuid) ? _flowRepo.GetOneById(flowId) : null;
if (null == flowModel)
{
if (isNew)
{
//新建流程,初始化选项
//Guid userId = Current.GetUserId(Request);
var userId = _userManager.UserId;
JObject jObject = new JObject()
{
{ "id", GuidExtensions.NewGuid() },
{ "type", args.GetJsonValue("typeid") },
{ "manager", RoadFlow.Data.IOrganize.PREFIX_USER + userId.ToString() },
{ "instanceManager", RoadFlow.Data.IOrganize.PREFIX_USER + userId.ToString() },
};
return jObject;
}
else
{
throw Oops.Oh("流程未找到");
}
}
else
{
//如果包含动态步骤则JSON要从rf_flowdynamic表中取
string groupId = args.GetJsonValue("groupid");//, isThrowExp: true);//组id
if (groupId.IsGuid(out Guid groupGuid))
{
string dynamicstepid = args.GetJsonValue("dynamicstepid");
if (!dynamicstepid.IsGuid(out Guid dynamicStepGuid))//动态步骤步骤id
{
var groupTasks = _flowTaskRepo.GetListByGroupId(groupId);
var dynamicStep = groupTasks.Find(p => p.BeforeStepId.IsNullOrEmpty() && p.BeforeStepId.IsNotEmptyGuid());
if (dynamicStep != null)
{
dynamicstepid = dynamicStep.BeforeStepId;
}
}
if (dynamicStepGuid.IsNotEmptyGuid())
{
var flowDynamicModel = _flowDynamicRepo.Get(dynamicstepid, groupId);
string dynamicFlowJSON = null == flowDynamicModel ? "{}" : flowDynamicModel.FlowJSON;
return new { EnableDynamicStep = RoadFlow.Utility.Config.EnableDynamicStep ? "1" : "0", data = JObject.Parse(dynamicFlowJSON) };
}
}
//========================================
JObject jObject = JObject.Parse(flowModel.DesignerJSON);
return new { EnableDynamicStep = RoadFlow.Utility.Config.EnableDynamicStep ? "1" : "0", data = jObject };
}
}
/// <summary>
/// 得到数据连接
/// </summary>
/// <returns></returns>
[HttpGet("GetDBConns")]
public dynamic GetDBConns()
{
var conns = _dbConnectionRepo.GetAll();
return conns;
}
/// <summary>
/// 得到一个连接表的字段
/// </summary>
/// <returns></returns>
[HttpPost("GetConnTableFields")]
public dynamic GetConnTableFields([FromBody] JObject args)
{
var connId = args.GetJsonGuidValue("connid", isThrowExp: true);
string table = args.GetJsonValue("table");
JArray jArray = new JArray();
var fields = _dbConnectionRepo.GetTableFields(connId.Value.ToString(), table.Trim());
foreach (var field in fields)
{
jArray.Add(new JObject() {
{ "name", field.FieldName },
{ "type", field.Type },
{ "size", field.Size },
{ "comment", field.Comment },
});
}
return jArray;
}
/// <summary>
/// 得到一个连接对应的表
/// </summary>
/// <returns></returns>
[HttpGet("GetConnTables")]
public dynamic GetConnTables(string connid)
{
// var connId = args.GetJsonGuidValue("connid", isThrowExp: true);
string connId = connid;
JArray jArray = new JArray();
var tables = _dbConnectionRepo.GetTables(connId);
foreach (var table in tables)
{
jArray.Add(new JObject() { { "table", table.Key }, { "note", table.Value } });
}
return jArray;
}
/// <summary>
/// 得到工作角色选项
/// </summary>
/// <returns></returns>
[HttpGet("GetWorkRoleOptions")]
public dynamic GetWorkRoleOptions()
{
var workDict = this._dicRepo.GetOneByCode("Organize_Work_Role");
if (workDict == null)
{
//return RoadFlowCommon.Tools.GetReturnJsonString(jArray: new JArray());
throw Oops.Oh("Code有误");
}
string lang = Tools.GetCurrentLanguage();
string roleTitle = this._dicRepo.GetLanguageTitle(workDict, lang);
var dicts = this._dicRepo.GetChilds(workDict.Id);
JArray jArray = new JArray();
foreach (var dict in dicts)
{
jArray.Add(new JObject()
{
{ "value", dict.Id.ToLower() + "|1" },
{ "title", "发起者" + roleTitle + "-" + this._dicRepo.GetLanguageTitle(dict, lang) }
});
}
foreach (var dict in dicts)
{
jArray.Add(new JObject()
{
{ "value", dict.Id.ToLower() + "|2" },
//{ "title", localizer["Sender"].Value + roleTitle + "-" + dictionary.GetLanguageTitle(dict, lang) }
{ "title", "发送者" + roleTitle + "-" + this._dicRepo.GetLanguageTitle(dict, lang) }
});
}
//return RoadFlowCommon.Tools.GetReturnJsonString(jArray: jArray);
return jArray;
}
/// <summary>
/// 得到工作角色选项(只是选项,没有加发起者,发送者。)
/// </summary>
/// <returns></returns>
[HttpGet("GetWorkRoleOptions1")]
public dynamic GetWorkRoleOptions1()
{
var workDict = this._dicRepo.GetOneByCode("Organize_Work_Role");
if (workDict == null)
{
throw Oops.Oh("Code有误");
}
string lang = Tools.GetCurrentLanguage();
var dicts = this._dicRepo.GetChilds(workDict.Id);
JArray jArray = new JArray();
foreach (var dict in dicts)
{
jArray.Add(new JObject()
{
{ "value", dict.Id.ToLower() },
{ "title", this._dicRepo.GetLanguageTitle(dict, lang) }
});
}
return jArray;
}
[HttpPost("SaveFlow")]
[AllowAnonymous]
public string SaveFlow([FromBody] JObject args)
{
string opation = args.GetJsonValue("opation");
string json = args.GetJsonValue("json");
string msg = string.Empty;
string successMsg = string.Empty;
switch (opation)
{
case "save":
msg = _flowRepo.Save(json);
successMsg = "保存成功";//_localizer["SaveSuccessfully"].Value;
break;
case "install":
msg = _flowRepo.Install(json);
successMsg = "发布成功";//_localizer["PublishSuccessfully"].Value;
break;
case "uninstall":
msg = _flowRepo.UnInstall(json, 2);
successMsg = "卸载成功";// _localizer["UninstallSuccessfully"].Value;
break;
case "delete":
msg = _flowRepo.UnInstall(json, 3);
successMsg = "删除成功";//_localizer["DeleteSuccessfully"].Value;
break;
}
if ("1".Equals(msg))
{
return successMsg;
}
else
{
return msg;
}
}
/// <summary>
/// 流程另存为
/// </summary>
/// <returns></returns>
[HttpPost("SaveAsFlow")]
public string SaveAsFlow([FromBody] JObject args)
{
string newName = args.GetJsonValue("newName");
string id = args.GetJsonValue("id");
if (!id.IsGuid(out Guid flowId) || newName.IsNullOrWhiteSpace())
{
return "链接id或表名错误";//_localizer["ConnectionIdOrTableNameError"].Value;
}
string msg = _flowRepo.SaveAs(id, newName.Trim());
return msg;
}
/// <summary>
/// 恢复删除流程
/// </summary>
/// <returns></returns>
[HttpGet("RecoveryFlow")]
public string RecoveryFlow(string id)
{
//string id = args.GetJsonValue("id");
if (!id.IsGuid(out Guid flowId))
{
return "流程保存出错";//_localizer["Save_FlowIdError"].Value;
}
var flowModel = _flowRepo.Get(id);
if (null == flowModel)
{
return string.Empty;
}
flowModel.Status = 0;
_flowRepo.Update(flowModel);
_logRepo.Add("恢复了删除流程-" + flowModel.Name,_userManager.UserId, flowId.ToString(),LogType.);
return "恢复成功";//_localizer["NotFoundrecoveryFlow"].Value;
}
/// <summary>
/// 删除流程(作删除标记)
/// </summary>
/// <returns></returns>
[HttpPost("DeleteFlow")]
public string DeleteFlow([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids");
foreach (string id in ids.Split(','))
{
if (!id.IsGuid(out Guid flowId))
{
continue;
}
var flowModel = _flowRepo.Get(id);
if (null == flowModel)
{
continue;
}
flowModel.Status = 3;
_flowRepo.Update(flowModel);
_flowRepo.ClearCache(id);
_logRepo.Add("删除了流程(作删除标记)-" + flowModel.Name, _userManager.UserId,id, LogType.);
}
return "删除成功"; //_localizer["DeleteSuccessfully"].Value;
}
/// <summary>
/// 彻底删除流程
/// </summary>
/// <returns></returns>
[HttpPost("ThoroughDeleteFlow")]
public string ThoroughDeleteFlow([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids");
foreach (string id in ids.Split(','))
{
if (!id.IsGuid(out Guid flowId))
{
continue;
}
var flowModel = _flowRepo.Get(id);
if (null == flowModel)
{
continue;
}
_flowRepo.Delete(flowModel);
//删除应用程序库
var appModel = _applibrary.GetByCode(flowModel.Id.ToString());
if (null != appModel)
{
_applibrary.Delete(appModel.Id);
}
//删除流程实例
_flowRepo.DeleteBy(x=>x.Id==flowModel.Id);
_logRepo.Add("彻底删除了流程-" + flowModel.Name,_userManager.UserId, flowModel.ToString(), LogType.);
}
return "彻底删除成功";//_localizer["DeleteSuccessfully"].Value;
}
/// <summary>
/// 导入流程
/// </summary>
/// <returns></returns>
[HttpPost("ImportFlow")]
public string ImportFlow([FromBody] JObject args)
{
var files = args.GetJsonValue("files");
if (files.IsNullOrWhiteSpace())
{
return "未选中导入文件";//_localizer["NoSelectImportFile"].Value;
}
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
foreach (string file in files.Split(','))
{
string filePath = RoadFlow.Utility.Config.FilePath + file.DESDecrypt();
if (!System.IO.File.Exists(filePath))
{
continue;
}
var stream = System.IO.File.OpenRead(filePath);
int count = (int)stream.Length;
byte[] b = new byte[count];
stream.Read(b, 0, count);
string json = System.Text.Encoding.UTF8.GetString(b);
string msg = _flowRepo.ImportFlow(json, false);
stream.Close();
stream.DisposeAsync();
try
{
System.IO.File.Delete(filePath);
}
catch (IOException err)
{
_logRepo.Add(err);
}
if (!"1".Equals(msg))
{
stringBuilder.Append(msg + "");
}
}
string msg1 = stringBuilder.ToString();
return msg1.IsNullOrWhiteSpace() ? "导入成功" /* _localizer["ImportSuccessfully"].Value */: msg1;
}
/// <summary>
/// 得到已删除流程列表
/// </summary>
/// <returns></returns>
[HttpPost("GetRemoveFlowList")]
public dynamic GetRemoveFlowList([FromBody] JObject args)
{
string name = args.GetJsonValue("name");
int number = args.GetJsonValue("number").ToInt();
int size = args.GetJsonValue("size").ToInt();
string order = args.GetJsonValue("order");
if (order.IsNullOrWhiteSpace())
{
order = "CreateDate asc";
}
string userId = _userManager.UserId;
var flows = _flowRepo.GetPagerList(out int total, size, number, _flowRepo.GetManageFlowIds(userId), name,string.Empty, order, 3);
JArray jArray = new JArray();
List<string> uids = new List<string>();
foreach (var dr in flows)
{
JObject jObject = new JObject()
{
{ "Id", dr.Id },
{ "Name", dr.Name },
{ "CreateDate", dr.CreateDate.ToShortDateTimeString() },
{ "CreateUser",dr.CreateUser},
};
uids.Add(dr.CreateUser.ToString());
jArray.Add(jObject);
}
var rtn =_sysUserRepo.DetachedEntities.Where(x => uids.Contains(x.Id)).ToList();
foreach (JObject j in jArray)
{
string userid = j["CreateUser"].ToString();
j["CreateUser"] =rtn.Find(x => x.Id == userid)?.Name;
}
JObject jObject1 = new JObject
{
{ "total", total },
{ "rows", jArray }
};
return jObject1;
}
/// <summary>
/// 得到流程选项
/// </summary>
/// <returns></returns>
[HttpGet("GetFlowOptions")]
public dynamic GetFlowOptions()
{
var flows = _flowRepo.GetAll().Where(p => p.Status == 1).GroupBy(p => p.FlowType);
JArray jArray = new JArray();
var dictRootId = _dicRepo.GetIdByCode("system_applibrarytype_flow");
var dicts = _dicRepo.GetAllChilds(dictRootId, true);
foreach (var dict in dicts)
{
var flows1 = flows.Where(p => p.Key == dict.Id);
if (!flows1.Any())
{
continue;
}
//string dictTitle = dictionary.GetAllParentTitle(dict.Id, true, false, dictRootId.ToString());
foreach (var flow in flows1)
{
foreach (var f in flow.OrderBy(p => p.Name))
{
jArray.Add(new JObject()
{
{ "value", f.Id.ToString() },
{ "title", f.Name + " - " + dict.Title },
});
}
}
}
return jArray;
}
#endregion
#region
/// <summary>
/// 查询自己的委托
/// </summary>
/// <returns></returns>
[HttpPost("GetEntrusts")]
public dynamic GetEntrusts([FromBody] JObject args)
{
int number = args.GetJsonValue("number").ToInt();
int size = args.GetJsonValue("size").ToInt();
string order = args.GetJsonValue("order");
if (order.IsNullOrWhiteSpace())
{
order = "WriteTime desc";
}
if (_userManager.UserId.IsNullOrWhiteSpace())
{
return new JObject() { { "total", 0 }, { "rows", new JArray() } };
//RoadFlowCommon.Tools.GetReturnJsonString(jObject: new JObject() { { "total", 0 }, { "rows", new JArray() } });
}
return GetPageEntrusts(size, number, _userManager.UserId, string.Empty, string.Empty, order);
}
/// <summary>
/// 查询所有委托
/// </summary>
/// <returns></returns>
[HttpPost("GetAllEntrusts")]
public dynamic GetAllEntrusts([FromBody] JObject args)
{
string userId = args.GetJsonValue("userId");
string date1 = args.GetJsonValue("date1");
string date2 = args.GetJsonValue("date2");
int number = args.GetJsonValue("number").ToInt();
int size = args.GetJsonValue("size").ToInt();
string order = args.GetJsonValue("order");
if (order.IsNullOrWhiteSpace())
{
order = "WriteTime desc";
}
return GetPageEntrusts(size, number, userId.RemoveUserPrefix(), date1, date2, order);
}
/// <summary>
/// 查询一页委托
/// </summary>
/// <returns></returns>
private dynamic GetPageEntrusts(int size, int number, string userId, string date1, string date2, string order)
{
List<RoadFlow.Model.rf_flowentrust> entrusts = _flowEntrust.GetPagerList(out int total, size, number, userId, date1, date2, order);
JArray jArray = new JArray();
List<string> uids = new();
foreach (RoadFlow.Model.rf_flowentrust dr in entrusts)
{
DateTime startTime = dr.StartTime;
DateTime endTime = dr.EndTime;
DateTime now = DateExtensions.Now;
string status;
if (startTime >= now)
{
status = "<span class=\"roadui_liststatus roadui_liststatusdisabled\">" + "未开始" + "</span>";//localizer["NoStart"].Value
}
else if (endTime <= now)
{
status = "<span class=\"roadui_liststatus roadui_liststatusdisabled\">" + "已完成" + "</span>";//localizer["Finished"].Value
}
else
{
status = "<span class=\"roadui_liststatus roadui_liststatus_normal\">" +"进行中" + "</span>"; //localizer["Entrusting"].Value
}
//_sysUserRepo.DetachedEntities.FirstOrDefault(x => x.Id == dr.UserId)
JObject jObject = new JObject
{
{ "Id", dr.Id },
{ "UserId",dr.UserId },
{ "ToUserId", _userDummy.GetNames(dr.ToUserId) },
{ "FlowId", !dr.FlowId.IsGuid() ? "所有流程" : _flowRepo.GetOneById(dr.FlowId)?.Name },//localizer["AllFlows"].Value
{ "WriteTime", dr.WriteTime.ToShortDateTimeString() },
{ "StartTime", startTime.ToShortDateTimeString() },
{ "EndTime", endTime.ToShortDateTimeString() },
{ "Note", dr.Note },
{ "Status", status },
{ "Opation", "" }
};
uids.Add(dr.UserId);
jArray.Add(jObject);
}
var users = _sysUserRepo.DetachedEntities.Where(x =>uids.Contains( x.Id));
foreach (var j in jArray)
{
j["UserId"] = users.FirstOrDefault(x => x.Id == j["UserId"].ToString())?.Name;
}
JObject json = new JObject() {
{ "total", total }
};
json.Add("rows", jArray);
return json;//RoadFlowCommon.Tools.GetReturnJsonString(jObject: json);
}
/// <summary>
/// 查询一个委托
/// </summary>
/// <returns></returns>
[HttpGet("GetEntrust")]
public dynamic GetEntrust(string id)
{
RoadFlow.Model.rf_flowentrust flowEntrustModel = null;
if (id.IsGuid())
{
flowEntrustModel = _flowEntrust.GetOneById(id);
}
if (flowEntrustModel == null)
{
flowEntrustModel = new RoadFlow.Model.rf_flowentrust();
}
return flowEntrustModel.ToJObject();//RoadFlowCommon.Tools.GetReturnJsonString(jObject: flowEntrustModel.ToJObject());
}
/// <summary>
/// 删除委托
/// </summary>
/// <returns></returns>
[HttpPost("DeleteEntrust")]
public string DeleteEntrust([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids");
List<RoadFlow.Model.rf_flowentrust> flowEntrusts = new ();
foreach (string id in ids.Split(','))
{
if (!id.IsGuid())
{
continue;
}
var model = _flowEntrust.GetOneById(id);
if (null != model)
{
flowEntrusts.Add(model);
}
}
_flowEntrust.Delete(flowEntrusts);
_logRepo.Add("删除了委托",_userManager.UserId ,Newtonsoft.Json.JsonConvert.SerializeObject(flowEntrusts), LogType.);
return "删除成功";
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["DeleteSuccessfully"].Value);
}
/// <summary>
/// 保存委托
/// </summary>
/// <returns></returns>
[HttpPost("SaveEntrust")]
public string SaveEntrust([FromBody] JObject args)
{
string id = args.GetJsonValue("id");
bool isoneself = "1".Equals(args.GetJsonValue("isoneself"));
string UserId = args.GetJsonValue("UserId");
string ToUserId = args.GetJsonValue("ToUserId");
string StartTime = args.GetJsonValue("StartTime");
string EndTime = args.GetJsonValue("EndTime");
string FlowId = args.GetJsonValue("FlowId");
string Note = args.GetJsonValue("Note");
if (ToUserId.IsNullOrEmpty() || !StartTime.IsDateTime(out DateTime sTime) || !EndTime.IsDateTime(out DateTime eTime))
{
throw Oops.Oh("数据验证出错");
//return "数据验证出错";
//RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["DataValidError"].Value);
}
RoadFlow.Model.rf_flowentrust flowEntrustModel = null;
RoadFlow.Model.rf_flowentrust flowEntrust = new RoadFlow.Model.rf_flowentrust();
bool isAdd = true;
if (id.IsGuid())
{
flowEntrustModel = _flowEntrust.GetOneById(id);
isAdd = false;
}
if (flowEntrustModel == null)
{
isAdd = true;
flowEntrustModel = new RoadFlow.Model.rf_flowentrust
{
Id = GuidExtensions.NewGuid().ToString(),
};
}
var userModel = _userManager.User;
flowEntrustModel.UserId = isoneself ? userModel.Id : UserId.RemoveUserPrefix();
flowEntrustModel.ToUserId = ToUserId;
flowEntrustModel.StartTime = sTime;
flowEntrustModel.EndTime = eTime;
flowEntrustModel.FlowId = FlowId.IsGuid(out Guid fid) ? FlowId : GuidExtensions.NewGuid().ToString();
if (!Note.IsNullOrWhiteSpace())
{
flowEntrustModel.Note = Note;
}
else
{
flowEntrustModel.Note = null;
}
flowEntrustModel.WriteTime = DateExtensions.Now;
if (isAdd)
{
_flowEntrust.Add(flowEntrustModel);
_logRepo.Add("添加了委托(" + userModel.Name + ")",_userManager.UserId, flowEntrustModel.ToString(), LogType.);
}
else
{
_flowEntrust.Update(flowEntrustModel);
_logRepo.Add("修改了委托(" + userModel.Name + ")", _userManager.UserId,flowEntrustModel.ToString(), LogType.);
}
return "保存成功";//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["SaveSuccessfully"].Value);
}
#endregion
#region
/// <summary>
/// 得到自己的常用意见选项
/// </summary>
/// <returns></returns>
[HttpGet("GetFlowCommentOptions")]
public dynamic GetFlowCommentOptions()
{
JArray commentArray = new JArray();
var comments = _flowComment.GetListByUserId(_userManager.UserId);
foreach (var comment in comments)
{
commentArray.Add(new JObject() { { "value", comment.Comments }, { "title", comment.Comments } });
}
return commentArray;
//RoadFlowCommon.Tools.GetReturnJsonString(jArray: commentArray);
}
//得到自己的意见列表
[HttpPost("GetComments")]
public dynamic GetComments()
{
//Guid userId = Current.GetUserId(Request);
var comments = _flowComment.GetAll().FindAll(p => p.UserId == _userManager.UserId);
JArray jArray = new JArray();
foreach (var comment in comments)
{
JObject jObject = new JObject
{
{ "Id", comment.Id },
{ "Comments", comment.Comments },
{ "AddType", comment.AddType == 0 ? "用户添加":"管理员添加" },// localizer["UserAdd"].Value : localizer["AdministratorAdd"].Value },
{ "Sort", comment.Sort },
{ "Opation", "" }
};
jArray.Add(jObject);
}
return jArray;
//RoadFlowCommon.Tools.GetReturnJsonString(jArray: jArray);
}
//得到管理员管理的意见列表
[HttpPost("GetAllComments")]
public dynamic GetAllComments([FromBody] JObject args)
{
string queryComment = args.GetJsonValue("comment");
string userId = args.GetJsonValue("userId");
int number = args.GetJsonValue("number").ToInt();
int size = args.GetJsonValue("size").ToInt();
string order = args.GetJsonValue("order");
if (order.IsNullOrWhiteSpace())
{
order = "Sort asc";
}
var comments = _flowComment.GetPagerList(out int total, size, number, queryComment, userId, order);
JArray jArray = new JArray();
foreach (var comment in comments)
{
JObject jObject = new JObject
{
{ "Id", comment.Id },
{ "Comments", comment.Comments },
{ "UserId", comment.UserId.IsNullOrWhiteSpace() ? "全员":_userDummy.GetNames(comment.UserId) },//localizer["AllUsers"].Value : user.GetName(comment.UserId) },
{ "AddType", comment.AddType == 0 ? "用户添加":"管理员添加" },// localizer["UserAdd"].Value : localizer["AdministratorAdd"].Value },
{ "Sort", comment.Sort },
{ "Opation", "" }
};
jArray.Add(jObject);
}
JObject json = new JObject() {
{ "total", total }
};
json.Add("rows", jArray);
return json;// RoadFlowCommon.Tools.GetReturnJsonString(jObject: json);
}
/// <summary>
/// 查询一个意见
/// </summary>
/// <returns></returns>
[HttpGet("GetComment")]
public dynamic GetComment(string id)
{
var commentModel = _flowComment.GetOneById(id);
return commentModel.ToJObject();
// RoadFlowCommon.Tools.GetReturnJsonString(jObject: commentModel == null? new JObject() : commentModel.ToJObject());
}
/// <summary>
/// 保存意见
/// </summary>
/// <returns></returns>
[HttpPost("SaveComment")]
public string SaveComment([FromBody] JObject args)
{
string id =args.GetJsonValue("id");
bool isoneself = "1".Equals(args.GetJsonValue("isoneself"));
string Comments = args.GetJsonValue("Comments");
string UserId = args.GetJsonValue("UserId");
string AddType = args.GetJsonValue("AddType");
string Sort = args.GetJsonValue("Sort");
if (Comments.IsNullOrWhiteSpace())
{
throw Oops.Oh("意见不得为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["OpitionEmpty"].Value);
}
RoadFlow.Model.rf_flowcomment flowCommentModel = null;
if (id.IsGuid(out Guid guid))
{
flowCommentModel = _flowComment.GetOneById(id);
}
bool isAdd = false;
if (flowCommentModel == null)
{
flowCommentModel = new RoadFlow.Model.rf_flowcomment
{
Id = GuidExtensions.NewGuid().ToString(),
AddType = isoneself ? 0 : 1
};
isAdd = true;
}
flowCommentModel.Comments = Comments.Trim();
flowCommentModel.UserId = isoneself ? _userManager.UserId : UserId.RemoveUserPrefix();
flowCommentModel.Sort = Sort.ToInt(0);
if (isAdd)
{
_flowComment.Add(flowCommentModel);
_logRepo.Add("添加了流程意见",_userManager.UserId, flowCommentModel.ToString(), LogType.);
}
else
{
_flowComment.Update(flowCommentModel);
_logRepo.Add("修改了流程意见", _userManager.UserId, flowCommentModel.ToString(), LogType.);
}
return "保存成功";//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["SaveSuccessfully"].Value);
}
/// <summary>
/// 删除意见
/// </summary>
/// <returns></returns>
[HttpPost("DeleteComment")]
public string DeleteComment([FromBody] JObject args)
{
string[] ids = args.GetJsonValue("ids").Split(',');
List<RoadFlow.Model.rf_flowcomment> flowComments = new ();
var all = _flowComment.GetAll();
foreach (string id in ids)
{
if (!id.IsGuid())
{
continue;
}
var comment = all.Find(p => p.Id == id);
if (null == comment)
{
continue;
}
flowComments.Add(comment);
}
_flowComment.Delete(flowComments);
_logRepo.Add("删除了流程意见",_userManager.UserId, Newtonsoft.Json.JsonConvert.SerializeObject(flowComments), LogType.);
return "删除成功";//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["DeleteSuccessfully"].Value);
}
#endregion
}
}