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

575 lines
23 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 Ewide.Core;
using Ewide.RoadFlowLite.Utility;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using RoadFlow.Data;
using RoadFlow.Utility;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.RoadFlowLite.Serivce.Form
{
[Route("/api/roadflow/Form/")]
[ApiDescriptionSettings("RoadFlow")]
public class FormService : IDynamicApiController, ITransient
{
private readonly IDictionary _dic;
private readonly ILog _log;
private readonly IUserManager _userManager;
private readonly IForm _form;
private readonly IApplibrary _appLibrary;
public FormService( ILog log, IUserManager userManager,IForm form, IDictionary dictionary,IApplibrary applibrary)
{
_form = form;
_log = log;
_userManager = userManager;
_dic = dictionary;
_appLibrary = applibrary;
}
/// <summary>
/// 查询表单列表
/// </summary>
/// <returns></returns>
[HttpPost("GetList")]
public dynamic GetList([FromBody] JObject args)
{
string name = args.GetJsonValue("name");
string typeId = args.GetJsonValue("type");
int number = args.GetJsonValue("number").ToInt();
int size = args.GetJsonValue("size").ToInt();
string order = args.GetJsonValue("order");
if (order.IsNullOrWhiteSpace())
{
order = "CreateDate DESC";
}
if (typeId.IsGuid(out Guid typeGuidId))
{
var childsId = _dic.GetAllChildsId(typeId);
typeId = childsId.JoinSqlIn(false);
}
else
{
typeId = string.Empty;
}
string userId = _userManager.UserId;
var forms = _form.GetPagerList(out int total, size, number, userId, name, typeId, order);
JArray jArray = new JArray();
foreach (var dr in forms)
{
JObject jObject = new JObject()
{
{ "Id", dr.Id},
{ "Name", dr.Name },
{ "CreateDate", dr.CreateDate==null ? dr.CreateDate.ToDateTimeString() : string.Empty },
{ "CreateUserName", dr.CreateUserName},
};
jArray.Add(jObject);
}
JObject jObject1 = new JObject
{
{ "total", total },
{ "rows", jArray }
};
return jObject1;// RoadFlowCommon.Tools.GetReturnJsonString(jObject: jObject1);
}
/// <summary>
/// 查询已删除表单列表
/// </summary>
/// <returns></returns>
[HttpPost("GetRemoveList")]
public dynamic GetRemoveList([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 DESC";
}
string userId = _userManager.UserId;
var forms = _form.GetPagerList(out int total, size, number, userId, name, string.Empty, order, 2);
JArray jArray = new JArray();
foreach (var dr in forms)
{
JObject jObject = new JObject()
{
{ "Id", dr.Id},
{ "Name", dr.Name},
{ "CreateDate", dr.CreateDate.ToShortDateString() },
{ "CreateUserName", dr.CreateUserName},
};
jArray.Add(jObject);
}
JObject jObject1 = new JObject
{
{ "total", total },
{ "rows", jArray }
};
return jObject1; //RoadFlowCommon.Tools.GetReturnJsonString(jObject: jObject1);
}
/// <summary>
/// 得到设计时HTML
/// </summary>
/// <returns></returns>
[HttpGet("GetDesignHtml")]
public dynamic GetDesignHtml(string formId)
{
if (!formId.IsGuid(out Guid formGuid))
{
throw Oops.Oh("ID错误");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["IdError"].Value);
}
var formModel = _form.GetOneById(formId);
if (null == formModel)
{
throw Oops.Oh("未找到表格");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["NotFoundForm"].Value);
}
JObject jObject = new JObject() {
{ "success", true },
{ "attr", formModel.attribute.ToJObject() },
{ "html", formModel.Html },
{ "event", formModel.EventJSON.ToJArray() },
{ "subtable", formModel.SubtableJSON.ToJArray() }
};
return jObject;//RoadFlowCommon.Tools.GetReturnJsonString(jObject: jObject);
}
/// <summary>
/// 保存表单
/// </summary>
/// <returns></returns>
[HttpPost("Save")]
public dynamic Save([FromBody] JObject args)
{
Console.WriteLine(args["attJSON"]);
string attJSON = args.GetJsonValue("attJSON");
string eventJSON = args.GetJsonValue("eventJSON");
string subtableJSON = args.GetJsonValue("subtableJSON");
string html = args.GetJsonValue("html");
bool isNew = "1".Equals(args.GetJsonValue("isnew"));
JObject jObject = attJSON.ToJObject();
if (jObject.IsEmptyJObject())
{
throw Oops.Oh("表格属性错误");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormAttError"].Value }, { "id", "" } });
}
string id = jObject.Value<string>("id");
string name = jObject.Value<string>("name");
string formType = jObject.Value<string>("formType");
string manageUser = jObject.Value<string>("manageUser");
string userId = _userManager.UserId;
if (!id.IsGuid(out Guid guid) && !isNew)
{
throw Oops.Oh("表格ID不能为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormIdCannotEmpty"].Value }, { "id", "" } });
}
if (name.IsNullOrWhiteSpace())
{
throw Oops.Oh("表格名不能为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormNameEmpty"].Value }, { "id", "" } });
}
if (!formType.IsGuid(out Guid typeId))
{
throw Oops.Oh("表格类型不能为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormTypeEmpty"].Value }, { "id", "" } });
}
if (manageUser.IsNullOrWhiteSpace())//如果没有指定管理者,则默认为创建人员
{
manageUser = IOrganize.PREFIX_USER + userId.ToString();
}
var formModel = isNew ? null : _form.GetOneById(guid.ToString());
if (null == formModel)
{
formModel = new RoadFlow.Model.rf_form
{
Id = GuidExtensions.NewGuid().ToString(),
Status = 0,
CreateDate = DateExtensions.Now,
CreateUserId = userId,
CreateUserName = _userManager.User.Name
};
if (jObject.ContainsKey("id"))
{
jObject["id"] = formModel.Id;
}
else
{
jObject.Add("id", formModel.Id);
}
}
formModel.Name = name.Trim();
formModel.FormType = typeId.ToString();
formModel.EventJSON = eventJSON;
formModel.SubtableJSON = subtableJSON;
formModel.attribute = isNew ? jObject.ToString(Newtonsoft.Json.Formatting.None) : attJSON;
formModel.Html = html;
formModel.EditDate = DateExtensions.Now;
formModel.ManageUser = manageUser.ToLower();
_ = isNew ? _form.Add(formModel) : _form.Update(formModel);
_log.Add((isNew ? "新增" : "修改") + "了表单-" + name,_userManager.UserId, formModel.ToString(), LogType.);
return new JObject() { { "msg","保存成功" }, { "id", formModel.Id } };
//RoadFlowCommon.Tools.GetReturnJsonString(true, jObject: new JObject() { { "msg", localizer["SaveSuccessfully"].Value }, { "id", formModel.Id } });
}
/// <summary>
/// 删除表单(作删除标记)
/// </summary>
/// <returns></returns>
[HttpPost("Delete")]
public string Delete([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids");
foreach (string id in ids.Split(','))
{
if (!id.IsGuid(out Guid formId))
{
continue;
}
var formModel = _form.GetOneById(id);
if (null == formModel)
{
continue;
}
_form.DeleteAndApplibrary(formModel, 0);
_log.Add("删除了表单(作删除标记)-" + formModel.Name,_userManager.UserId ,formId.ToString(), LogType.);
}
return "删除成功";
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["DeleteSuccessfully"].Value);
}
/// <summary>
/// 彻底删除表单
/// </summary>
/// <returns></returns>
[HttpPost("ThoroughDelete")]
public string ThoroughDelete([FromBody] JObject args)
{
string ids = args.GetJsonValue("ids");
foreach (string id in ids.Split(','))
{
if (!id.IsGuid(out Guid formId))
{
continue;
}
var formModel = _form.GetOneById(id);
if (null == formModel)
{
continue;
}
_form.DeleteAndApplibrary(formModel, 1);
_log.Add("彻底删除了表单-" + formModel.Name, _userManager.UserId,formModel.ToString(), LogType.);
}
return "删除成功";
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["DeleteSuccessfully"].Value);
}
/// <summary>
/// 恢复删除表单
/// </summary>
/// <returns></returns>
[HttpGet("Recovery")]
public string Recovery(string id)
{
if (!id.IsGuid(out Guid formId))
{
throw Oops.Oh("Id错误");
// return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["IdError"].Value);
}
var formModel = _form.GetOneById(id);
if (null == formModel)
{
throw Oops.Oh("未找到待恢复表格");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["NotFoundRecovery"].Value);
}
formModel.Status = 0;
_form.Update(formModel);
_log.Add("恢复了表单-" + formModel.Name,_userManager.UserId, formId.ToString(),LogType.);
return "恢复成功";
//RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["RecoverySuccessfully"].Value);
}
/// <summary>
/// 发布表单
/// </summary>
/// <returns></returns>
[HttpPost("Publish")]
public dynamic Publish([FromBody] JObject args)
{
string attJSON = args.GetJsonValue("attJSON");
string eventJSON = args.GetJsonValue("eventJSON");
string subtableJSON = args.GetJsonValue("subtableJSON");
string html = args.GetJsonValue("html");
string runHtml = args.GetJsonValue("runHtml");
bool isNew = "1".Equals(args.GetJsonValue("isnew"));
#region
JObject jObject = attJSON.ToJObject();
if (jObject.IsEmptyJObject())
{
throw Oops.Oh("表格属性错误");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormAttError"].Value }, { "id", "" } });
}
string id = jObject.Value<string>("id");
string name = jObject.Value<string>("name");
string formType = jObject.Value<string>("formType");
string manageUser = jObject.Value<string>("manageUser");
string userId = _userManager.UserId;
if (!id.IsGuid(out Guid guid) && !isNew)
{
throw Oops.Oh("表格ID不能为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormIdCannotEmpty"].Value }, { "id", "" } });
}
if (name.IsNullOrWhiteSpace())
{
throw Oops.Oh("表格名不能为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormNameEmpty"].Value }, { "id", "" } });
}
if (!formType.IsGuid(out Guid typeId))
{
throw Oops.Oh("表格类型不能为空");
// return RoadFlowCommon.Tools.GetReturnJsonString(false, jObject: new JObject() { { "msg", localizer["FormTypeEmpty"].Value }, { "id", "" } });
}
if (manageUser.IsNullOrWhiteSpace())//如果没有指定管理者,则默认为创建人员
{
manageUser = IOrganize.PREFIX_USER + userId.ToString();
}
var formModel = isNew ? null : _form.GetOneById(guid.ToString());
if (null == formModel)
{
formModel = new RoadFlow.Model.rf_form
{
Id = GuidExtensions.NewGuid().ToString(),
Status = 0,
CreateDate = DateExtensions.Now,
CreateUserId = userId,
CreateUserName = _userManager.User.Name
};
if (jObject.ContainsKey("id"))
{
jObject["id"] = formModel.Id;
}
else
{
jObject.Add("id", formModel.Id);
}
}
formModel.Name = name.Trim();
formModel.FormType = typeId.ToString();
formModel.EventJSON = eventJSON;
formModel.SubtableJSON = subtableJSON;
formModel.attribute = isNew ? jObject.ToString(Newtonsoft.Json.Formatting.None) : attJSON;
formModel.Html = html;
formModel.RunHtml = runHtml;
formModel.EditDate = DateExtensions.Now;
formModel.ManageUser = manageUser.ToLower();
_ = isNew ? _form.Add(formModel) : _form.Update(formModel);
#endregion
#region
var appModel = _appLibrary.GetByCode(formModel.Id.ToString());
bool isAddAppModel = false;
if (appModel == null)
{
isAddAppModel = true;
appModel = new RoadFlow.Model.rf_applibrary()
{
Id = GuidExtensions.NewGuid().ToString(),
Code = formModel.Id.ToString()
};
}
appModel.Title = formModel.Name;
appModel.Title_en = appModel.Title_en.IsNullOrEmpty() ? formModel.Name : appModel.Title_en;
appModel.Title_zh = appModel.Title_zh.IsNullOrEmpty() ? formModel.Name : appModel.Title_zh;
appModel.Type = formModel.FormType;
appModel.Address = appModel.Code;//VUE不需要地址,这里填入表单ID,方便查看直接从数据表加载HTML//formModel.Id.ToLowerString() + ".html";
_ = isAddAppModel ? _appLibrary.Add(appModel) : _appLibrary.Update(appModel);
#endregion
#region
_form.ClearRunJObjectCache(formModel.Id);
#endregion
_log.Add("发布了表单-" + name,_userManager.UserId ,formModel.ToString(), LogType., others: appModel.ToString());
return new JObject() { { "msg", "发布成功" }, { "id", formModel.Id } };
//RoadFlowCommon.Tools.GetReturnJsonString(true, jObject: new JObject() { { "msg", localizer["PublishSuccessfully"].Value }, { "id", formModel.Id } });
}
/// <summary>
/// 另存为
/// </summary>
/// <returns></returns>
[HttpPost("SaveAs")]
public string SaveAs([FromBody] JObject args)
{
string formId = args.GetJsonValue("id");
string formName = args.GetJsonValue("name");
if (!formId.IsGuid(out Guid formGuid))
{
throw Oops.Oh("Id错误");
// return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["IdError"].Value);
}
if (formName.IsNullOrWhiteSpace())
{
throw Oops.Oh("名字不能为空");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["NameEmpty"].Value);
}
var formModel = _form.GetOneById(formId);
if (null == formModel)
{
throw Oops.Oh("未找到源表格");
// return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["SaveAsNotFound"].Value);
}
var userModel = _userManager.User;
formModel.Id = GuidExtensions.NewGuid().ToString();
formModel.Name = formName.Trim();
formModel.CreateDate = DateExtensions.Now;
formModel.EditDate = formModel.CreateDate;
formModel.CreateUserId = userModel.Id;
formModel.CreateUserName = userModel.Name;
formModel.Status = 0;
JObject jObject;
try
{
jObject = JObject.Parse(formModel.attribute);
jObject["id"] = formModel.Id;
jObject["name"] = formModel.Name;
formModel.attribute = jObject.ToString(Newtonsoft.Json.Formatting.None);
}
catch (Exception err)
{
throw Oops.Oh(err.Message);
//return RoadFlowCommon.Tools.GetReturnJsonString(false, err.Message);
}
if (_form.Add(formModel) == 1)
{
return "保存成功";
//return RoadFlowCommon.Tools.GetReturnJsonString(true, localizer["SaveAsSuccessfully"].Value);
}
else
{
throw Oops.Oh("保存失败");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["SaveAsFailed"].Value);
}
}
/// <summary>
/// 根据sql得到下拉选项
/// </summary>
/// <returns></returns>
[HttpPost("GetOpitonsBySql")]
public dynamic GetOpitonsBySql([FromBody] JObject args)
{
string connId = args.GetJsonValue("connid");
string sql = args.GetJsonValue("sql");
string value = args.GetJsonValue("value");
JArray jArray = _form.GetJArrayOptionsBySQL(connId, sql, value);
return jArray;
//RoadFlowCommon.Tools.GetReturnJsonString(jArray: jArray);
}
/// <summary>
/// 根据url得到下拉选项
/// </summary>
/// <returns></returns>
[HttpPost("GetOpitonsByUrl")]
public dynamic GetOpitonsByUrl([FromBody] JObject args)
{
string url = args.GetJsonValue("url");
string value = args.GetJsonValue("value");
string parentvalue = args.GetJsonValue("parentvalue");
string queryString = "value=" + value + "&parentvalue=" + parentvalue;
url = url.Contains('?') ? url + "&" + queryString : url + "?" + queryString;
string options = _form.GetOptionsByUrl(url);
return options.ToJArray();
//RoadFlowCommon.Tools.GetReturnJsonString(jArray: options.ToJArray());
}
/// <summary>
/// 导入表单
/// </summary>
/// <returns></returns>
[HttpPost("ImportForm")]
public string ImportForm([FromBody] JObject args)
{
var files = args.GetJsonValue("files");
if (files.IsNullOrWhiteSpace())
{
throw Oops.Oh("没有导入文件");
//return RoadFlowCommon.Tools.GetReturnJsonString(false, localizer["NoImportFile"].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 = _form.ImportForm(json, false);
stream.Close();
stream.DisposeAsync();
try
{
System.IO.File.Delete(filePath);
}
catch (IOException err)
{
_log.Add(err);
}
if (!"1".Equals(msg))
{
stringBuilder.Append(msg + "");
}
}
string msg1 = stringBuilder.ToString();
if (msg1.IsNullOrWhiteSpace())
return "导入成功";
else
throw Oops.Oh(msg1);
//RoadFlowCommon.Tools.GetReturnJsonString(msg1.IsNullOrWhiteSpace(), msg1.IsNullOrWhiteSpace() ? localizer["ImportSuccessfully"].Value : msg1);
}
}
}