通过autofac依赖注入实现策略模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace Inventory.Services
{
    /// <summary>
    /// 调用导出任务接口
    /// </summary>
    public interface IExportPoliyService
    {
        void RunTask(ETaskType type);

        void RunTask(ExportFileTaskTable task);
    }

    /// <summary>
    /// 调用导出任务
    /// </summary>
    public class ExportPoliyService : IExportPoliyService
    {
        private IList<IExportTaskPoliy> _poliyList;
        public ExportPoliyService(IList<IExportTaskPoliy> poliyList)
        {
            _poliyList = poliyList;
        }

        public void RunTask(ETaskType type)
        {
            var service = _poliyList.Where(x => x.Type == type).FirstOrDefault();
            if (service != null)
                service.Handle(null);
            else
                throw new Exception("");
        }

        public void RunTask(ExportFileTaskTable task)
        {
            var service = _poliyList.Where(x => x.Type == task.TaskType).FirstOrDefault();
            if (service != null)
                service.Handle(task);
            else
                throw new Exception("");
        }
    }

    /// <summary>
    /// 导出任务策略接口
    /// </summary>
    public interface IExportTaskPoliy
    {
        ETaskType Type { get; }

        void Handle(GeneratetFileTask task);
    }

    /// <summary>
    /// 预订活动导出策略
    /// </summary>
    public class BookingProductExportPoliy : IExportTaskPoliy
    {
        public ETaskType Type { get => ETaskType.预订活动列表导出; }

        public void Handle(GeneratetFileTask task)
        {
            //处理导出任务逻辑
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// 商品导出策略
    /// </summary>
    public class ProductExportPoliy : IExportTaskPoliy
    {
        public ETaskType Type { get => ETaskType.商品导出Excel; }

        public void Handle(GeneratetFileTask task)
        {
            //处理导出任务逻辑
            throw new NotImplementedException();
        }
    }

    /// <summary>
    /// 任务类型
    /// </summary>
    public enum ETaskType
    {
        商品导出Excel = 1,
        订单导出Excel = 2,
        商家订单报表导出Excel = 3,
        商家订单报表明细导出Excel = 4,
        库存报表导出Excel = 5,
        业务员管理列表 = 6,
        业务员发展线下店业绩 = 7,
        业务员发展线下店购买订单详情 = 8,
        商家营业额报表导出 = 9,
        商家营业额明细报表导出 = 10,
        预订活动列表导出 = 11,
    }

    /// <summary>
    /// 任务数据表
    /// </summary>
    public class ExportFileTaskTable
    {
        /// <summary>
        /// 任务名称
        /// </summary>
        public string TaskName { get; set; }
        /// <summary>
        /// 客户端类型:0商家端,1买家端
        /// </summary>
        public EClientType ClientType { get; set; }

        /// <summary>
        /// 任务类型:1商品导出,
        /// </summary>
        public ETaskType TaskType { get; set; }

        /// <summary>
        /// 请求参数
        /// </summary>
        public string Args { get; set; }

        /// <summary>
        /// 导出文件的头信息
        /// </summary>
        public string Headers { get; set; }

        /// <summary>
        /// 重试次数
        /// </summary>
        public int RetryCount { get; set; }

        /// <summary>
        /// 重试时间
        /// </summary>
        public DateTime? RetryTime { get; set; }

        /// <summary>
        /// 任务执行结果 0 未执行 1 成功 2失败
        /// </summary>
        public ETaskResultStatus ResultStatus { get; set; }

        /// <summary>
        /// 文件路径
        /// </summary>
        public string FileName { get; set; }
        /// <summary>
        /// 导入文件地址
        /// </summary>
        public string ImportFileUrl { get; set; }
        /// <summary>
        /// 下载文件名
        /// </summary>
        public string DwonloadFileName { get; set; }

        /// <summary>
        /// 下载文件方式
        /// </summary>
        public EDwonloadFileWay DwonloadFileWay { get; set; }
        /// <summary>
        /// 是否阅读
        /// </summary>
        public bool IsRead { get; set; }

        /// <summary>
        /// Desc:创建人 
        /// Default:0 
        /// Nullable:False 
        /// </summary>
        public int Creator { get; set; }

        /// <summary>
        /// Desc:创建时间 
        /// </summary>
        public DateTime CreateTime { get; set; }
    }
}

 

posted @ 2022-02-08 10:29  Jeffcode  阅读(91)  评论(0)    收藏  举报