ProcessManager.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. var ret = process.Process(input);
  49. data = ret.Data;
  50. code = ret.Code;
  51. Global.writeLog_Process("process:" + process.GetType().Name, $"{input}", $"code:{code};data:{data}");
  52. if (code < 0)
  53. {
  54. //异常
  55. if (string.IsNullOrEmpty(data))
  56. {
  57. data = ret.ErrMsg;
  58. }
  59. break;
  60. }
  61. if (!string.IsNullOrEmpty(data))
  62. {
  63. input = JObject.Parse(data);
  64. }
  65. }
  66. JToken jToken = JToken.Parse(data);
  67. if (jToken.Type == JTokenType.String)
  68. {
  69. jToken = new JObject
  70. {
  71. ["errorCode"] = code,
  72. ["errorMessage"] = data,
  73. ["result"] = data
  74. };
  75. }
  76. else if (jToken.Type == JTokenType.Object)
  77. {
  78. }
  79. else
  80. {
  81. jToken = new JObject
  82. {
  83. ["errorCode"] = -1,
  84. ["errorMessage"] = "未知类型,请检查process返回值",
  85. ["result"] = data
  86. };
  87. }
  88. JObject rtn = JObject.FromObject(jToken);
  89. //返回值检测(兼容)
  90. if (!rtn.ContainsKey("errorCode"))
  91. {
  92. rtn = JsonHelper.setIrisReturnValue(code, "",rtn);
  93. Global.writeLog("异常返回值检测", data, rtn.ToString());
  94. }
  95. return rtn.ToString();
  96. }
  97. }
  98. }