using Newtonsoft.Json.Linq;
using PTMedicalInsurance.Helper;
using PTMedicalInsurance.Variables;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PTMedicalInsurance.Business
{
class ProcessManager
{
private List<AbstractProcess> Processes { get; set; }
public ProcessManager()
{
Processes = new List<AbstractProcess>();
}
public ProcessManager(List<AbstractProcess> processes)
{
Processes = processes;
}
/// <summary>
/// 增加单个处理流程
/// </summary>
/// <param name="process"></param>
public ProcessManager Add(AbstractProcess process)
{
Processes.Add(process);
return this;
}
/// <summary>
/// 运行
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public string Run(JObject input)
{
JObject orginalInput = (JObject)input?.DeepClone();
string data = "";
int code = 0;
// 按顺序执行业务
foreach (var process in Processes)
{
if (process.UseOrginal) {
process.OrginalInput = orginalInput;
input = orginalInput; //原始参数
}
var ret = process.Process(input);
data = ret.Data;
code = ret.Code;
if (code < 0)
{
//异常
if (string.IsNullOrEmpty(data))
{
data = ret.ErrMsg;
}
break;
}
if (!string.IsNullOrEmpty(data))
{
input = JObject.Parse(data);
}
}
JObject rtn = JObject.Parse(data);
//返回值检测(兼容)
if (!rtn.ContainsKey("errorCode"))
{
rtn = JsonHelper.setIrisReturnValue(code, "",rtn);
Global.writeLog("异常返回值检测", data, rtn.ToString());
}
return rtn.ToString();
}
}
}