Exemplo n.º 1
0
        public void TestMethod1()
        {
            Console.WriteLine(DateTime.Now.Ticks);

            var       basePath = @"G:\办学导出模板.xls";
            DataTable data     = BxReader.ReadFromFile(basePath);



            Console.WriteLine(data);
        }
Exemplo n.º 2
0
        public List <DiffResult> Execute(string banxueFile, string dynamicFile, string diffBase)
        {
            //
            // 清空之前的比对结果
            //
            _assetsService.ClearDiffResult();

            //
            // 创建比对结果
            //
            var result = new List <DiffResult>();

            //
            // 获取本库数据
            //
            var localData = _assetsService.QueryPage(new AssetsQuery {
                PageIndex = 1, PageSize = int.MaxValue
            });

            //
            // 获取办学数据
            //
            List <AssetsMain> banxueData = null;

            if (!string.IsNullOrEmpty(banxueFile))
            {
                //double temp;
                banxueData = BxReader.ReadData(banxueFile, ref progress, _importHistoryService, _unImportAssetsService);
                banxueData = banxueData ?? new List <AssetsMain>();
            }

            //
            // 获取动态数据
            //
            List <AssetsMainExt> dynamicData = null;

            if (!string.IsNullOrEmpty(dynamicFile))
            {
                dynamicData = DtReader.ReadData(dynamicFile, ref progress, _importHistoryService, _unImportAssetsService);
                dynamicData = dynamicData ?? new List <AssetsMainExt>();
            }

            //
            // 开始比对
            //
            switch (diffBase)
            {
            case "本库":
                for (var index = 0; index < localData.Items.Count; index++)
                {
                    AssetsMain item     = localData.Items[index];
                    var        diffItem = new DiffResult
                    {
                        Index      = result.Count + 1,
                        LocalCode  = item.AssetsNum,
                        LocalName  = item.GoodsName,
                        LocalValue = item.Money,
                        LocalMode  = item.ModelSpecification,
                        LocalState = "存在"
                    };

                    //
                    // 办学比对
                    // 首先看办学数据是否存在该库存号
                    //
                    bool _tempState = banxueData.Any(x => x.UsedNum2 == item.UsedNum2);

                    //
                    // 如果存在该库存号,则比对资产名称/价值/规格
                    // 上述三项中有任意一项不匹配则表示存在但是数有差异
                    //
                    if (_tempState)
                    {
                        //
                        // 取出该条数据
                        //
                        AssetsMain _banxueData = new AssetsMain();
                        _banxueData = banxueData.FirstOrDefault(x => x.UsedNum2 == item.UsedNum2);

                        //
                        // 比对资产名称/价值/规格
                        //
                        bool _allSame = true;

                        bool _nameSame  = _banxueData.GoodsName == item.GoodsName;
                        bool _moneySame = _banxueData.Money == item.Money;
                        bool _modeSame  = _banxueData.Brand == item.Brand;
                        _allSame = _allSame & _nameSame & _moneySame & _modeSame;

                        //
                        // 填充比对结果
                        //
                        diffItem.BxState = _allSame ? "精确匹配" : "存在但有差异";
                        diffItem.BxCode  = _banxueData.UsedNum2;
                        diffItem.BxName  = _banxueData.GoodsName;
                        diffItem.BxValue = _banxueData.Money;
                        diffItem.BxMode  = _banxueData.Brand;
                    }
                    else
                    {
                        //
                        // 如果不存在该库存号,则无需对该资产进行办学比对
                        //
                        diffItem.BxState = "不存在";
                        diffItem.BxCode  = "";
                        diffItem.BxName  = "";
                        diffItem.BxValue = 0;
                        diffItem.BxMode  = "";
                    }

                    //
                    // 动态比对
                    //
                    _tempState = dynamicData.Any(x => x.UsedNum2 == item.UsedNum2);

                    //
                    // 如果存在该库存号,则比对资产名称/价值/规格
                    // 上述三项中有任意一项不匹配则表示存在但是数有差异
                    //
                    if (_tempState)
                    {
                        //
                        // 取出该条数据
                        //
                        AssetsMain _dynamicData = new AssetsMain();
                        _dynamicData = dynamicData.FirstOrDefault(x => x.UsedNum2 == item.UsedNum2);

                        //
                        // 比对资产名称/价值/规格
                        //
                        bool _allSame = true;

                        bool _nameSame  = _dynamicData.GoodsName == item.GoodsName;
                        bool _moneySame = _dynamicData.Money == item.Money;
                        bool _modeSame  = _dynamicData.Brand == item.Brand;
                        _allSame = _allSame & _nameSame & _moneySame & _modeSame;

                        //
                        // 填充比对结果
                        //
                        diffItem.DtState = _allSame ? "精确匹配" : "存在但有差异";
                        diffItem.DtCode  = _dynamicData.UsedNum2;
                        diffItem.DtName  = _dynamicData.GoodsName;
                        diffItem.DtValue = _dynamicData.Money;
                        diffItem.DtMode  = _dynamicData.Brand;
                    }
                    else
                    {
                        //
                        // 如果不存在该库存号,则无需对该资产进行办学比对
                        //
                        diffItem.DtState = "不存在";
                        diffItem.DtCode  = "";
                        diffItem.DtName  = "";
                        diffItem.DtValue = 0;
                        diffItem.DtMode  = "";
                    }

                    //
                    // 总比对结果
                    //
                    if ((diffItem.LocalState == "存在") && (diffItem.BxState == "存在") && (diffItem.DtState == "存在"))
                    {
                        diffItem.DiffState = "匹配";
                    }
                    else
                    {
                        diffItem.DiffState = "不匹配";
                    }
                    //
                    // 添加到比对结果列表
                    //
                    result.Add(diffItem);
                }
                break;

            case "办学库":
                for (var index = 0; index < banxueData.Count; index++)
                {
                    AssetsMain item     = banxueData[index];
                    var        diffItem = new DiffResult
                    {
                        Index   = result.Count + 1,
                        BxCode  = item.AssetsNum,
                        BxName  = item.GoodsName,
                        BxValue = item.Money,
                        BxMode  = item.ModelSpecification,
                        BxState = "存在"
                    };

                    //
                    // 本库比对
                    // 首先看办学数据是否存在该库存号
                    //
                    bool _tempState = localData.Items.Any(x => x.UsedNum2 == item.UsedNum2);

                    //
                    // 如果存在该库存号,则比对资产名称/价值/规格
                    // 上述三项中有任意一项不匹配则表示存在但是数有差异
                    //
                    if (_tempState)
                    {
                        //
                        // 取出该条数据
                        //
                        AssetsMain _localData = new AssetsMain();
                        _localData = localData.Items.FirstOrDefault(x => x.UsedNum2 == item.UsedNum2);

                        //
                        // 比对资产名称/价值/规格
                        //
                        bool _allSame = true;

                        bool _nameSame  = _localData.GoodsName == item.GoodsName;
                        bool _moneySame = _localData.Money == item.Money;
                        bool _modeSame  = _localData.Brand == item.Brand;
                        _allSame = _allSame & _nameSame & _moneySame & _modeSame;

                        //
                        // 填充比对结果
                        //
                        diffItem.LocalState = _allSame ? "精确匹配" : "存在但有差异";
                        diffItem.LocalCode  = _localData.UsedNum2;
                        diffItem.LocalName  = _localData.GoodsName;
                        diffItem.LocalValue = _localData.Money;
                        diffItem.LocalMode  = _localData.Brand;
                    }
                    else
                    {
                        //
                        // 如果不存在该库存号,则无需对该资产进行办学比对
                        //
                        diffItem.LocalState = "不存在";
                        diffItem.LocalCode  = "";
                        diffItem.LocalName  = "";
                        diffItem.LocalValue = 0;
                        diffItem.LocalMode  = "";
                    }

                    //
                    // 动态比对
                    //
                    _tempState = dynamicData.Any(x => x.UsedNum2 == item.UsedNum2);

                    //
                    // 如果存在该库存号,则比对资产名称/价值/规格
                    // 上述三项中有任意一项不匹配则表示存在但是数有差异
                    //
                    if (_tempState)
                    {
                        //
                        // 取出该条数据
                        //
                        AssetsMain _dynamicData = new AssetsMain();
                        _dynamicData = dynamicData.FirstOrDefault(x => x.UsedNum2 == item.UsedNum2);

                        //
                        // 比对资产名称/价值/规格
                        //
                        bool _allSame = true;

                        bool _nameSame  = _dynamicData.GoodsName == item.GoodsName;
                        bool _moneySame = _dynamicData.Money == item.Money;
                        bool _modeSame  = _dynamicData.Brand == item.Brand;
                        _allSame = _allSame & _nameSame & _moneySame & _modeSame;

                        //
                        // 填充比对结果
                        //
                        diffItem.DtState = _allSame ? "精确匹配" : "存在但有差异";
                        diffItem.DtCode  = _dynamicData.UsedNum2;
                        diffItem.DtName  = _dynamicData.GoodsName;
                        diffItem.DtValue = _dynamicData.Money;
                        diffItem.DtMode  = _dynamicData.Brand;
                    }
                    else
                    {
                        //
                        // 如果不存在该库存号,则无需对该资产进行办学比对
                        //
                        diffItem.DtState = "不存在";
                        diffItem.DtCode  = "";
                        diffItem.DtName  = "";
                        diffItem.DtValue = 0;
                        diffItem.DtMode  = "";
                    }

                    //
                    // 总比对结果
                    //
                    if ((diffItem.LocalState == "存在") && (diffItem.BxState == "存在") && (diffItem.DtState == "存在"))
                    {
                        diffItem.DiffState = "匹配";
                    }
                    else
                    {
                        diffItem.DiffState = "不匹配";
                    }

                    //
                    // 添加到比对结果列表
                    //
                    result.Add(diffItem);
                }
                break;

            case "动态库":
                for (var index = 0; index < dynamicData.Count; index++)
                {
                    AssetsMain item     = dynamicData[index];
                    var        diffItem = new DiffResult
                    {
                        Index   = result.Count + 1,
                        DtCode  = item.AssetsNum,
                        DtName  = item.GoodsName,
                        DtValue = item.Money,
                        DtMode  = item.ModelSpecification,
                        DtState = "存在"
                    };

                    //
                    // 本库比对
                    // 首先看办学数据是否存在该库存号
                    //
                    bool _tempState = localData.Items.Any(x => x.UsedNum2 == item.UsedNum2);

                    //
                    // 如果存在该库存号,则比对资产名称/价值/规格
                    // 上述三项中有任意一项不匹配则表示存在但是数有差异
                    //
                    if (_tempState)
                    {
                        //
                        // 取出该条数据
                        //
                        AssetsMain _localData = new AssetsMain();
                        _localData = localData.Items.FirstOrDefault(x => x.UsedNum2 == item.UsedNum2);

                        //
                        // 比对资产名称/价值/规格
                        //
                        bool _allSame = true;

                        bool _nameSame  = _localData.GoodsName == item.GoodsName;
                        bool _moneySame = _localData.Money == item.Money;
                        bool _modeSame  = _localData.Brand == item.Brand;
                        _allSame = _allSame & _nameSame & _moneySame & _modeSame;

                        //
                        // 填充比对结果
                        //
                        diffItem.LocalState = _allSame ? "精确匹配" : "存在但有差异";
                        diffItem.LocalCode  = _localData.UsedNum2;
                        diffItem.LocalName  = _localData.GoodsName;
                        diffItem.LocalValue = _localData.Money;
                        diffItem.LocalMode  = _localData.Brand;
                    }
                    else
                    {
                        //
                        // 如果不存在该库存号,则无需对该资产进行办学比对
                        //
                        diffItem.LocalState = "不存在";
                        diffItem.LocalCode  = "";
                        diffItem.LocalName  = "";
                        diffItem.LocalValue = 0;
                        diffItem.LocalMode  = "";
                    }

                    //
                    // 办学比对
                    // 首先看办学数据是否存在该库存号
                    //
                    _tempState = banxueData.Any(x => x.UsedNum2 == item.UsedNum2);

                    //
                    // 如果存在该库存号,则比对资产名称/价值/规格
                    // 上述三项中有任意一项不匹配则表示存在但是数有差异
                    //
                    if (_tempState)
                    {
                        //
                        // 取出该条数据
                        //
                        AssetsMain _banxueData = new AssetsMain();
                        _banxueData = banxueData.FirstOrDefault(x => x.UsedNum2 == item.UsedNum2);

                        //
                        // 比对资产名称/价值/规格
                        //
                        bool _allSame = true;

                        bool _nameSame  = _banxueData.GoodsName == item.GoodsName;
                        bool _moneySame = _banxueData.Money == item.Money;
                        bool _modeSame  = _banxueData.Brand == item.Brand;
                        _allSame = _allSame & _nameSame & _moneySame & _modeSame;

                        //
                        // 填充比对结果
                        //
                        diffItem.BxState = _allSame ? "精确匹配" : "存在但有差异";
                        diffItem.BxCode  = _banxueData.UsedNum2;
                        diffItem.BxName  = _banxueData.GoodsName;
                        diffItem.BxValue = _banxueData.Money;
                        diffItem.BxMode  = _banxueData.Brand;
                    }
                    else
                    {
                        //
                        // 如果不存在该库存号,则无需对该资产进行办学比对
                        //
                        diffItem.BxState = "不存在";
                        diffItem.BxCode  = "";
                        diffItem.BxName  = "";
                        diffItem.BxValue = 0;
                        diffItem.BxMode  = "";
                    }

                    //
                    // 总比对结果
                    //
                    if ((diffItem.LocalState == "存在") && (diffItem.BxState == "存在") && (diffItem.DtState == "存在"))
                    {
                        diffItem.DiffState = "匹配";
                    }
                    else
                    {
                        diffItem.DiffState = "不匹配";
                    }

                    //
                    // 添加到比对结果列表
                    //
                    result.Add(diffItem);
                }
                break;

            default:
                break;
            }



            //
            // 将比对结果写入比对结果表
            //
            foreach (DiffResult itemResult in result)
            {
                _assetsService.SaveDiffResult(itemResult);
            }

            return(result);
        }