Exemplo n.º 1
0
        public bool FindManifestAndBackup(out bool differentmanifest)
        {
            if (ManifestName == "")
            {
                differentmanifest = true;
                return(false);
            }
            differentmanifest = false;
            if (!Directory.Exists(FileSystemUtil.Directory.FullName))
            {
                return(false);
            }
            var files = Directory.GetFiles(FileSystemUtil.Directory.FullName, ".MNFST=*", SearchOption.TopDirectoryOnly);

            string[] manifestProperties = ManifestName.Split(',');

            foreach (string ManifestFileName in files)
            {
                if (ManifestFileName.StartsWith(Path.Combine(FileSystemUtil.Directory.FullName, manifestProperties[0] + ",")))
                {
                    if (File.Exists(Path.Combine(FileSystemUtil.Directory.FullName, ManifestName)))
                    {
                        BackupManifest(FileSystemUtil.Directory.FullName, ManifestName);
                        return(true);
                    }
                    else
                    {
                        differentmanifest = true;
                    }
                }
            }
            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Checks whether existing manifests on disk can be merged with new manifests being created, by testing whether any build products they reference have a newer timestamp
        /// </summary>
        /// <param name="BuildId">The current build id read from the version file. Only manifests matching this ID will be considered.</param>
        /// <param name="ManifestFiles">List of new manifest files</param>
        /// <param name="RecycleFileToManifest">If successful, is populated with a map of filename to existing manifests that can be merged with the new manifests.</param>
        /// <returns>True if the manifests can be recycled (and fills RecycleFileToManifest)</returns>
        bool TryRecyclingManifests(string BuildId, IEnumerable <FileReference> ManifestFiles, Dictionary <FileReference, ModuleManifest> RecycleFileToManifest)
        {
            bool bCanRecycleManifests = true;

            foreach (FileReference ManifestFileName in ManifestFiles)
            {
                ModuleManifest Manifest;
                if (ManifestFileName.IsUnderDirectory(UnrealBuildTool.EngineDirectory) && TryReadManifest(ManifestFileName, out Manifest))
                {
                    if (Manifest.BuildId == BuildId)
                    {
                        if (IsOutOfDate(ManifestFileName, Manifest))
                        {
                            bCanRecycleManifests = false;
                            break;
                        }
                        RecycleFileToManifest.Add(ManifestFileName, Manifest);
                    }
                }
            }
            return(bCanRecycleManifests);
        }
        public void ExcelGenearte()
        {
            var      temp           = new FileInfo(TemplateFileDir + Path.DirectorySeparatorChar + TemplateFileName);
            var      originManiName = ManifestFileDir + Path.DirectorySeparatorChar + ManifestFileName;
            FileInfo mani;

            if (ManifestFileName.EndsWith(".xls"))
            {
                var originMani = new FileInfo(originManiName);
                mani = new FileInfo(originMani + "x");
                var IsConverted = converter.XlsToXlsx(originMani);
                if (!IsConverted)
                {
                    Console.WriteLine("Convert fail.");
                    return;
                }
            }
            else
            {
                mani = new FileInfo(originManiName);
            }

            using (ExcelPackage maniPackage = new ExcelPackage(mani))
            {
                var maniWs = maniPackage.Workbook.Worksheets.FirstOrDefault();
                if (!ColumnNameExist(maniWs, InventoryName))
                {
                    throw new InvalidOperationException($"列{InventoryName}未配置");
                }
                if (!ColumnNameExist(maniWs, TotalAmountWithTax))
                {
                    throw new InvalidOperationException($"列{TotalAmountWithTax}未配置");
                }
                if (!ColumnNameExist(maniWs, InventoryAmount))
                {
                    throw new InvalidOperationException($"列{InventoryAmount}未配置");
                }
                if (!ColumnNameExist(maniWs, UnitWithTax))
                {
                    throw new InvalidOperationException($"列{UnitWithTax}未配置");
                }

                //To Do clean up the Data
                using (ExcelPackage tempPackage = new ExcelPackage(temp))
                {
                    //增值税清单模板
                    var    tempWs       = tempPackage.Workbook.Worksheets.FirstOrDefault();
                    int    currentIndex = 2;
                    int    count        = 1;
                    int    preIndex     = 2;
                    double moneySum     = 0;
                    string outputDir    = @"D:\清单结果";
                    string fileName     = ManifestFileName.Split('.')[0] + "子表";
                    var    lastIndex    = GetColumnLastRow(maniWs, InventoryName);
                    while (!(currentIndex > lastIndex))
                    {
                        if (moneySum < 113000)
                        {
                            double money;
                            var    moneyExist =
                                double.TryParse(
                                    maniWs.Cells[currentIndex, GetColumnByName(maniWs, TotalAmountWithTax)].Value?.ToString(),
                                    out money);
                            if (!moneyExist)
                            {
                                money = 0;
                            }
                            else if (money < 0)
                            {
                                throw new InvalidOperationException($"列{TotalAmountWithTax}不能为负数");
                            }

                            moneySum += money;
                            var stockName = maniWs.Cells[currentIndex, GetColumnByName(maniWs, InventoryName)];

                            var nameLength = stockName.Value?.ToString().Length;
                            if (nameLength > 30)
                            {
                                stockName.Value = stockName.Value.ToString().Substring(0, 29);
                            }

                            if (moneySum >= 113000 || currentIndex == lastIndex)
                            {
                                if (moneySum >= 113000)
                                {
                                    moneySum -= money;
                                    currentIndex--;
                                }

                                //生成子表
                                var fi = new FileInfo(outputDir + Path.DirectorySeparatorChar + fileName +
                                                      count.ToString() + ".xlsx");
                                using (ExcelPackage xlPackage = new ExcelPackage(fi))
                                {
                                    //sheet already exist
                                    var xlSheetsList = xlPackage.Workbook.Worksheets;
                                    var destWs       = xlSheetsList.All(x => x.Name != "增值税清单")
                                        ? xlSheetsList.Add("增值税清单", tempWs)
                                        : xlSheetsList["增值税清单"];
                                    var interval = currentIndex - preIndex + 2;

                                    string     destColumnName = "货物或应税劳务、服务名称";
                                    string     srcColumnName  = InventoryName;
                                    ExcelRange destRange      = GetExcelRange(destWs, 2, interval, destColumnName, destColumnName);
                                    ExcelRange srcRange       = GetExcelRange(maniWs, preIndex, currentIndex, srcColumnName,
                                                                              srcColumnName);
                                    CopyFrom(srcRange, destRange);

                                    if (ColumnNameExist(maniWs, InventoryCode))
                                    {
                                        destColumnName = "规格型号";
                                        srcColumnName  = InventoryCode;
                                        destRange      = GetExcelRange(destWs, 2, interval, destColumnName, destColumnName);
                                        srcRange       = GetExcelRange(maniWs, preIndex, currentIndex, srcColumnName,
                                                                       srcColumnName);
                                        CopyFrom(srcRange, destRange);
                                    }

                                    destColumnName = "数量";
                                    srcColumnName  = InventoryAmount;
                                    destRange      = GetExcelRange(destWs, 2, interval, destColumnName, destColumnName);
                                    srcRange       = GetExcelRange(maniWs, preIndex, currentIndex, srcColumnName,
                                                                   srcColumnName);
                                    CopyFrom(srcRange, destRange);

                                    destColumnName = "金额";
                                    srcColumnName  = TotalAmountWithTax;
                                    destRange      = GetExcelRange(destWs, 2, interval, destColumnName, destColumnName);
                                    srcRange       = GetExcelRange(maniWs, preIndex, currentIndex, srcColumnName,
                                                                   srcColumnName);
                                    CopyFrom(srcRange, destRange);

                                    destColumnName = "单价";
                                    srcColumnName  = UnitWithTax;
                                    destRange      = GetExcelRange(destWs, 2, interval, destColumnName, destColumnName);
                                    srcRange       = GetExcelRange(maniWs, preIndex, currentIndex, srcColumnName,
                                                                   srcColumnName);
                                    CopyFrom(srcRange, destRange);

                                    //copy operation
                                    CopyValue("价格方式", interval, destWs);
                                    //CopyValue("税收分类编码版本号", interval, destWs);
                                    CopyValue("使用优惠政策标识", interval, destWs);
                                    CopyValue("中外合作油气田标识", interval, destWs);

                                    FillValue("税率", interval, destWs, 0.13);
                                    FillValue("税收分类编码", interval, destWs, "1060201070000000000");
                                    FillValue("税收分类编码版本号", interval, destWs, "33.0");
                                    FillValue("计量单位", interval, destWs, "张");

                                    //set index column
                                    var st_lastRow     = GetColumnLastRow(destWs, "金额");
                                    var st_columnIndex = GetColumnByName(destWs, "序号");
                                    for (int i = 2; i <= st_lastRow; i++)
                                    {
                                        destWs.Cells[i, st_columnIndex].Value = i - 1;
                                    }

                                    preIndex = currentIndex + 1;
                                    xlPackage.SaveAs(fi);
                                    converter.XlsxToXls(fi);
                                }

                                moneySum = 0;
                                count++;
                            }
                        }

                        currentIndex++;
                    }
                }
            }

            if (File.Exists(mani.ToString()))
            {
                File.Delete(mani.ToString());
            }
        }