BillHandler.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ChainOfResponsibility
  7. {
  8. /// <summary>
  9. /// 单据处理角色
  10. /// </summary>
  11. public abstract class BillHandler
  12. {
  13. /// <summary>
  14. /// 单据处理者姓名
  15. /// </summary>
  16. public string UserName { get; set; }
  17. /// <summary>
  18. /// 单据处理者具有的权限
  19. /// </summary>
  20. public List<string> Permissions { get; set; }
  21. public bool CheckPermission(string permission)
  22. {
  23. return Permissions.Contains(permission);
  24. }
  25. //声明下一个处理者
  26. protected BillHandler Successor { get; set; }
  27. /// <summary>
  28. /// 处理单据
  29. /// </summary>
  30. /// <param name="bill"></param>
  31. public void HandleBill(Bill bill)
  32. {
  33. //单据处理从保存开始
  34. if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
  35. {
  36. this.DoBillOperation(bill);
  37. }
  38. else
  39. {
  40. this.Successor.DoBillOperation(bill);
  41. }
  42. }
  43. public abstract void DoBillOperation(Bill bill);
  44. }
  45. public class Purchaser : BillHandler
  46. {
  47. private List<string> permissions = new List<string>() { "SAVE" };
  48. public Purchaser(string username)
  49. {
  50. base.UserName = username;
  51. base.Permissions = permissions;
  52. base.Successor = new Manager("经理--任经理");//在构造函数中指定下一个处理者
  53. }
  54. public override void DoBillOperation(Bill bill)
  55. {
  56. if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
  57. {
  58. bill.Status = BillStatus.Saved;
  59. Console.WriteLine(string.Format("{0}:{1}已经保存!", this.UserName, bill.BilNo));
  60. }
  61. if (CheckPermission("SUBMIT") && bill.Status == BillStatus.Saved)
  62. {
  63. bill.Status = BillStatus.Submitted;
  64. Console.WriteLine(string.Format("{0}:{1}已经提交!", this.UserName, bill.BilNo));
  65. }
  66. if (CheckPermission("AUDIT") && bill.Status == BillStatus.Submitted)
  67. {
  68. if (bill.Amount <= 5000)
  69. {
  70. bill.Status = BillStatus.Submitted;
  71. Console.WriteLine(string.Format("{0}:{1}已经审核!", this.UserName, bill.BilNo));
  72. }
  73. else
  74. {
  75. this.Successor.DoBillOperation(bill);
  76. }
  77. }
  78. else
  79. {
  80. this.Successor.DoBillOperation(bill);
  81. }
  82. }
  83. }
  84. public class Manager : BillHandler
  85. {
  86. private List<string> permissions = new List<string>() { "SAVE", "SUBMIT", "AUDIT" };
  87. public Manager(string userName)
  88. {
  89. base.UserName = userName;
  90. base.Permissions = permissions;
  91. base.Successor = new CEO("CEO--链总");
  92. }
  93. public override void DoBillOperation(Bill bill)
  94. {
  95. if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
  96. {
  97. bill.Status = BillStatus.Saved;
  98. Console.WriteLine(string.Format("{0}:{1}已经保存!", this.UserName, bill.BilNo));
  99. }
  100. if (CheckPermission("SUBMIT") && bill.Status == BillStatus.Saved)
  101. {
  102. bill.Status = BillStatus.Submitted;
  103. Console.WriteLine(string.Format("{0}:{1}已经提交!", this.UserName, bill.BilNo));
  104. }
  105. if (CheckPermission("AUDIT") && bill.Status == BillStatus.Submitted)
  106. {
  107. if (bill.Amount <= 20000)
  108. {
  109. bill.Status = BillStatus.Submitted;
  110. Console.WriteLine(string.Format("{0}:{1}已经审核!", this.UserName, bill.BilNo));
  111. }
  112. else
  113. {
  114. this.Successor.DoBillOperation(bill);
  115. }
  116. }
  117. else
  118. {
  119. this.Successor.DoBillOperation(bill);
  120. }
  121. }
  122. }
  123. public class CEO : BillHandler
  124. {
  125. private List<string> permissions = new List<string>() { "SAVE", "SUBMIT", "AUDIT" };
  126. public CEO(string userName)
  127. {
  128. base.UserName = userName;
  129. base.Permissions = permissions;
  130. }
  131. public override void DoBillOperation(Bill bill)
  132. {
  133. if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
  134. {
  135. bill.Status = BillStatus.Saved;
  136. Console.WriteLine(string.Format("{0}:{1}已经保存!", this.UserName, bill.BilNo));
  137. }
  138. if (CheckPermission("SUBMIT") && bill.Status == BillStatus.Saved)
  139. {
  140. bill.Status = BillStatus.Submitted;
  141. Console.WriteLine(string.Format("{0}:{1}已经提交!", this.UserName, bill.BilNo));
  142. }
  143. if (CheckPermission("AUDIT") && bill.Status == BillStatus.Submitted)
  144. {
  145. bill.Status = BillStatus.Submitted;
  146. Console.WriteLine(string.Format("{0}:{1}已经审核!", this.UserName, bill.BilNo));
  147. }
  148. }
  149. }
  150. }