| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ChainOfResponsibility
- {
- /// <summary>
- /// 单据处理角色
- /// </summary>
- public abstract class BillHandler
- {
- /// <summary>
- /// 单据处理者姓名
- /// </summary>
- public string UserName { get; set; }
- /// <summary>
- /// 单据处理者具有的权限
- /// </summary>
- public List<string> Permissions { get; set; }
- public bool CheckPermission(string permission)
- {
- return Permissions.Contains(permission);
- }
- //声明下一个处理者
- protected BillHandler Successor { get; set; }
- /// <summary>
- /// 处理单据
- /// </summary>
- /// <param name="bill"></param>
- public void HandleBill(Bill bill)
- {
- //单据处理从保存开始
- if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
- {
- this.DoBillOperation(bill);
- }
- else
- {
- this.Successor.DoBillOperation(bill);
- }
- }
- public abstract void DoBillOperation(Bill bill);
- }
- public class Purchaser : BillHandler
- {
- private List<string> permissions = new List<string>() { "SAVE" };
- public Purchaser(string username)
- {
- base.UserName = username;
- base.Permissions = permissions;
- base.Successor = new Manager("经理--任经理");//在构造函数中指定下一个处理者
- }
- public override void DoBillOperation(Bill bill)
- {
- if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
- {
- bill.Status = BillStatus.Saved;
- Console.WriteLine(string.Format("{0}:{1}已经保存!", this.UserName, bill.BilNo));
- }
- if (CheckPermission("SUBMIT") && bill.Status == BillStatus.Saved)
- {
- bill.Status = BillStatus.Submitted;
- Console.WriteLine(string.Format("{0}:{1}已经提交!", this.UserName, bill.BilNo));
- }
- if (CheckPermission("AUDIT") && bill.Status == BillStatus.Submitted)
- {
- if (bill.Amount <= 5000)
- {
- bill.Status = BillStatus.Submitted;
- Console.WriteLine(string.Format("{0}:{1}已经审核!", this.UserName, bill.BilNo));
- }
- else
- {
- this.Successor.DoBillOperation(bill);
- }
- }
- else
- {
- this.Successor.DoBillOperation(bill);
- }
- }
- }
- public class Manager : BillHandler
- {
- private List<string> permissions = new List<string>() { "SAVE", "SUBMIT", "AUDIT" };
- public Manager(string userName)
- {
- base.UserName = userName;
- base.Permissions = permissions;
- base.Successor = new CEO("CEO--链总");
- }
- public override void DoBillOperation(Bill bill)
- {
- if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
- {
- bill.Status = BillStatus.Saved;
- Console.WriteLine(string.Format("{0}:{1}已经保存!", this.UserName, bill.BilNo));
- }
- if (CheckPermission("SUBMIT") && bill.Status == BillStatus.Saved)
- {
- bill.Status = BillStatus.Submitted;
- Console.WriteLine(string.Format("{0}:{1}已经提交!", this.UserName, bill.BilNo));
- }
- if (CheckPermission("AUDIT") && bill.Status == BillStatus.Submitted)
- {
- if (bill.Amount <= 20000)
- {
- bill.Status = BillStatus.Submitted;
- Console.WriteLine(string.Format("{0}:{1}已经审核!", this.UserName, bill.BilNo));
- }
- else
- {
- this.Successor.DoBillOperation(bill);
- }
- }
- else
- {
- this.Successor.DoBillOperation(bill);
- }
- }
- }
- public class CEO : BillHandler
- {
- private List<string> permissions = new List<string>() { "SAVE", "SUBMIT", "AUDIT" };
- public CEO(string userName)
- {
- base.UserName = userName;
- base.Permissions = permissions;
- }
- public override void DoBillOperation(Bill bill)
- {
- if (CheckPermission("SAVE") && bill.Status == BillStatus.Open)
- {
- bill.Status = BillStatus.Saved;
- Console.WriteLine(string.Format("{0}:{1}已经保存!", this.UserName, bill.BilNo));
- }
- if (CheckPermission("SUBMIT") && bill.Status == BillStatus.Saved)
- {
- bill.Status = BillStatus.Submitted;
- Console.WriteLine(string.Format("{0}:{1}已经提交!", this.UserName, bill.BilNo));
- }
- if (CheckPermission("AUDIT") && bill.Status == BillStatus.Submitted)
- {
- bill.Status = BillStatus.Submitted;
- Console.WriteLine(string.Format("{0}:{1}已经审核!", this.UserName, bill.BilNo));
- }
- }
- }
- }
|