ProcessManager.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.Helper;
  3. using PTMedicalInsurance.Variables;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace PTMedicalInsurance.Business
  10. {
  11. class ProcessManager
  12. {
  13. private List<AbstractProcess> Processes { get; set; }
  14. public ProcessManager()
  15. {
  16. Processes = new List<AbstractProcess>();
  17. }
  18. public ProcessManager(List<AbstractProcess> processes)
  19. {
  20. Processes = processes;
  21. }
  22. /// <summary>
  23. /// 增加单个处理流程
  24. /// </summary>
  25. /// <param name="process"></param>
  26. public ProcessManager Add(AbstractProcess process)
  27. {
  28. Processes.Add(process);
  29. return this;
  30. }
  31. /// <summary>
  32. /// 运行
  33. /// </summary>
  34. /// <param name="input"></param>
  35. /// <returns></returns>
  36. public string Run(JObject input)
  37. {
  38. JObject orginalInput = (JObject)input?.DeepClone();
  39. string data = "";
  40. int code = 0;
  41. // 按顺序执行业务
  42. foreach (var process in Processes)
  43. {
  44. if (process.UseOrginal) {
  45. process.OrginalInput = orginalInput;
  46. input = orginalInput; //原始参数
  47. }
  48. if (process.MergeOrginal)
  49. {
  50. //process.OrginalInput = orginalInput;
  51. input.Add("orginalInput", orginalInput); //原始参数
  52. }
  53. var ret = process.Process(input);
  54. data = ret.Data;
  55. code = ret.Code;
  56. if (code < 0)
  57. {
  58. //异常
  59. if (string.IsNullOrEmpty(data))
  60. {
  61. data = ret.ErrMsg;
  62. }
  63. break;
  64. }
  65. if (!string.IsNullOrEmpty(data))
  66. {
  67. input = JObject.Parse(data);
  68. }
  69. }
  70. JObject rtn = JObject.Parse(data);
  71. //返回值检测(兼容)
  72. if (!rtn.ContainsKey("errorCode"))
  73. {
  74. rtn = JsonHelper.setIrisReturnValue(code, "",rtn);
  75. Global.writeLog("异常返回值检测", data, rtn.ToString());
  76. }
  77. return rtn.ToString();
  78. }
  79. }
  80. }