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 Processes { get; set; } public ProcessManager() { Processes = new List(); } public ProcessManager(List processes) { Processes = processes; } /// /// 增加单个处理流程 /// /// public ProcessManager Add(AbstractProcess process) { Processes.Add(process); return this; } /// /// 运行 /// /// /// 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; Global.writeLog_Process("process:" + process.GetType().Name, $"{input}", $"code:{code};data:{data}"); if (code < 0) { //异常 if (string.IsNullOrEmpty(data)) { data = ret.ErrMsg; } break; } if (!string.IsNullOrEmpty(data)) { input = JObject.Parse(data); } } JToken jToken = JToken.Parse(data); if (jToken.Type == JTokenType.String) { jToken = new JObject { ["errorCode"] = code, ["errorMessage"] = data, ["result"] = data }; } else if (jToken.Type == JTokenType.Object) { } else { jToken = new JObject { ["errorCode"] = -1, ["errorMessage"] = "未知类型,请检查process返回值", ["result"] = data }; } JObject rtn = JObject.FromObject(jToken); //返回值检测(兼容) if (!rtn.ContainsKey("errorCode")) { rtn = JsonHelper.setIrisReturnValue(code, "",rtn); Global.writeLog("异常返回值检测", data, rtn.ToString()); } return rtn.ToString(); } } }