private void ProcessFront(DoubleSidePostCardCropInfo postCardProcessCropInfo)
        {
            Log(@"开始处理明信片[" + postCardProcessCropInfo.PostCardId + "]");
            // 更新状态为正在处理中
            PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESSING");


            // 创建临时目录
            if (!Directory.Exists(Path.GetTempPath() + "/PostCardCrop/"))
            {
                Directory.CreateDirectory(Path.GetTempPath() + "/PostCardCrop/");
            }

            var isWait = true;

            try
            {
                var resultFileInfo = new PostCardItemProductFileSubmitRequest();


                // 正面文件
                Log(@"开始下载正面文件");

                FileApi.DownloadFileByFileIdAsync(postCardProcessCropInfo.FrontCropCropInfo.FileId, new FileInfo(Path.GetTempPath() + "/PostCardCrop/" + Guid.NewGuid() + ".jpg"), frontFileInfo =>
                {
                    Log(@"文件下载成功,开始处理正面文件");
                    //========================================================================================== 处理正面 ==========================================================================================
                    var frontProductFile = frontFileInfo.Process(postCardProcessCropInfo.FrontCropCropInfo, postCardProcessCropInfo.PostCardType, postCardProcessCropInfo.ProductWidth, postCardProcessCropInfo.ProductHeight);
                    if (frontProductFile == null)
                    {
                        Log(@"正面文件处理失败");
                        PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                        isWait = false;
                        // 流程结束
                        return;
                    }

                    Log(@"正面文件处理完成");
                    Log(@"开始上传正面成品文件");
                    var frontFileUploadResponse       = frontProductFile.UploadFile("明信片正面成品");
                    resultFileInfo.FrontProductFileId = frontFileUploadResponse.Id;
                    Log(@"正面成品文件上传成功");

                    try
                    {
                        Log(@"开始删除正面文件");
                        // 删除文件
                        frontFileInfo.Delete();
                        // 删除文件
                        frontProductFile.Delete();
                        Log(@"正面文件删除成功");
                    }
                    catch (Exception e)
                    {
                        LogInfo.Error(e.Message, e);
                        Log(@"正面文件删除失败");
                    }

                    //========================================================================================== 没有反面,不用裁切 ==========================================================================================
                    // 有反面裁切
                    if (postCardProcessCropInfo.BackCropCropInfo == null)
                    {
                        Log(@"开始提交成品ID");
                        PostCardItemApi.SubmitPostCardProductFile(
                            postCardProcessCropInfo.PostCardId,
                            resultFileInfo,
                            k =>
                        {
                            Log(@"成品ID提交成功");
                            PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "AFTER_PROCESS", null);
                            isWait = false;
                        },
                            m =>
                        {
                            Log(@"成品ID提交失败");
                            PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                            isWait = false;
                        });
                    }
                    //========================================================================================== 有反面,但是不需要裁切 ==========================================================================================
                    else
                    {
                        var backCropInfo = postCardProcessCropInfo.BackCropCropInfo;
                        if (
                            string.IsNullOrEmpty(backCropInfo.FileId) ||
                            (
                                Math.Abs(backCropInfo.CropLeft) < 0.001 &&
                                Math.Abs(backCropInfo.CropTop) < 0.001 &&
                                Math.Abs(backCropInfo.CropWidth - 1) < 0.001 &&
                                Math.Abs(backCropInfo.CropHeight - 1) < 0.001)
                            )
                        {
                            Log(@"反面为标准尺寸,不需要裁切!");
                            resultFileInfo.BackProductFileId = backCropInfo.FileId;
                            Log(@"开始提交成品ID");
                            //========================================================================================== 提交 ==========================================================================================
                            PostCardItemApi.SubmitPostCardProductFile(
                                postCardProcessCropInfo.PostCardId,
                                resultFileInfo,
                                k =>
                            {
                                Log(@"成品ID提交成功");
                                PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "AFTER_PROCESS", null);
                                isWait = false;
                            },
                                m =>
                            {
                                Log(@"成品ID提交失败");
                                PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                                isWait = false;
                            });
                        }
                        //========================================================================================== 反面需要裁切 ==========================================================================================
                        else
                        {
                            Log(@"开始下载反面文件");

                            FileApi.DownloadFileByFileIdAsync(postCardProcessCropInfo.BackCropCropInfo.FileId, new FileInfo(Path.GetTempPath() + "/PostCardCrop/" + Guid.NewGuid() + ".jpg"), backFileInfo =>
                            {
                                Log(@"反面文件下载完成");
                                Log(@"开始处理反面文件");
                                var backProductFile = backFileInfo.Process(postCardProcessCropInfo.BackCropCropInfo, "B", postCardProcessCropInfo.ProductWidth, postCardProcessCropInfo.ProductHeight);
                                Log(@"反面文件处理完成");
                                Log(@"开始上传反面成品文件");
                                var backFileUploadResponse       = backProductFile.UploadFile("明信片正面成品");
                                resultFileInfo.BackProductFileId = backFileUploadResponse.Id;
                                Log(@"反面成品文件上传成功");
                                Log(@"开始删除反面文件");
                                try
                                {
                                    // 删除文件
                                    backFileInfo.Delete();
                                    // 删除文件
                                    backProductFile.Delete();
                                    Log(@"反面文件删除成功");
                                }
                                catch (Exception e)
                                {
                                    LogInfo.Error(e.Message, e);
                                    Log(@"反面文件删除失败");
                                }

                                Log(@"开始提交成品ID");
                                //========================================================================================== 提交 ==========================================================================================
                                PostCardItemApi.SubmitPostCardProductFile(
                                    postCardProcessCropInfo.PostCardId,
                                    resultFileInfo,
                                    k =>
                                {
                                    Log(@"成品ID提交成功");
                                    PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "AFTER_PROCESS", null);
                                    isWait = false;
                                },
                                    m =>
                                {
                                    Log(@"成品ID提交失败");
                                    PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                                    isWait = false;
                                });
                                //========================================================================================== 反面下载失败 ==========================================================================================
                            }, message =>
                            {
                                PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                                isWait = false;
                            });
                        }
                    }
                }, failure =>
                {
                    //========================================================================================== 正面下载失败 ==========================================================================================
                    Log("正面文件下载失败");
                    PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                    isWait = false;
                });
            }
            catch (Exception e)
            {
                Log(e.Message);
                PostCardItemApi.UpdatePostCardProcessStatus(postCardProcessCropInfo.PostCardId, "PROCESS_FAILURE", null);
                isWait = false;
            }

            while (isWait)
            {
                Application.DoEvents();
            }
        }
        private void SubmitPostCard(int rowHandler, CropInfo cropInfo)
        {
            if (_currentEnvelopeInfo == null)
            {
                return;
            }

            if (PostCardView.GetRow(rowHandler) is PostCardInfo postCardInfo)
            {
                // 如果当前提交doubleSide提交为null,创建一个(第一次提交为 null
                if (_doubleSidePostCardCropInfo == null)
                {
                    _doubleSidePostCardCropInfo = new DoubleSidePostCardCropInfo
                    {
                        PostCardId        = postCardInfo.PostCardId,         // ID,用于提交数据
                        ProductHeight     = postCardInfo.ProductSize.Height, // 成品高度,用于确定成品尺寸
                        ProductWidth      = postCardInfo.ProductSize.Width,  // 成品宽度,用于确定成品尺寸
                        PostCardType      = postCardInfo.FrontStyle,         // 正面样式,A B C D,用于确定板式
                        FrontCropCropInfo = new PostCardProcessCropInfo      // 正面裁切信息
                        {
                            FileId      = postCardInfo.FileId,
                            CropLeft    = cropInfo.CropLeft,
                            CropTop     = cropInfo.CropTop,
                            CropHeight  = cropInfo.CropHeight,
                            CropWidth   = cropInfo.CropWidth,
                            Rotation    = cropInfo.Rotation,
                            ImageWidth  = cropInfo.ImageWidth,
                            ImageHeight = cropInfo.ImageHeight
                        }
                    };
                    // 如果是双面,裁切双面
                    if (!string.IsNullOrEmpty(postCardInfo.BackFileId))
                    {
                        // 肯定是的,设置为反面
                        if (elementHost1.Child is Photocroper photoCropper)
                        {
                            photoCropper.ProductSize = new Size(postCardInfo.ProductSize.Width, postCardInfo.ProductSize.Height);
                            photoCropper.FrontStyle  = "B";
                            photoCropper.Preview     = false;
                            photoCropper.InitImage(Settings.Default.Host + "/file/" + postCardInfo.BackFileId, action: tempCropInfo =>
                            {
                                if (Math.Abs(tempCropInfo.CropWidth - 1) <= 0.001 && Math.Abs(tempCropInfo.CropHeight - 1) <= 0.001)
                                {
                                    tempCropInfo.CropHeight = 1;
                                    tempCropInfo.CropWidth  = 1;
                                    tempCropInfo.CropTop    = 0;
                                    tempCropInfo.CropLeft   = 0;
                                    timer1.Interval         = 100;
                                    //开始定时器,自动提交反面
                                    timer1.Start();
                                    // 提交
                                }
                            });
                            return;
                        }
                    }
                }
                else
                {
                    // 如果有反面文件ID,提交反面数据,否则不提交
                    if (!string.IsNullOrEmpty(postCardInfo.BackFileId))
                    {
                        _doubleSidePostCardCropInfo.BackCropCropInfo = new PostCardProcessCropInfo
                        {
                            FileId      = postCardInfo.BackFileId,
                            CropLeft    = cropInfo.CropLeft,   // 反面左边
                            CropTop     = cropInfo.CropTop,    // 反面右边
                            CropHeight  = cropInfo.CropHeight, // 反面高度
                            CropWidth   = cropInfo.CropWidth,  // 反面宽度
                            Rotation    = cropInfo.Rotation,   // 反面旋转角度
                            ImageWidth  = cropInfo.ImageWidth, // 原始图像宽度
                            ImageHeight = cropInfo.ImageHeight // 原始图像高度
                        }
                    }
                    ;
                }

                postCardInfo.ProcessStatusText = "已提交";

                PostCardProcessQueue.Process(_doubleSidePostCardCropInfo,
                                             info => { PostCardItemApi.UpdatePostCardProcessStatus(postCardInfo.PostCardId, "AFTER_SUBMIT"); },
                                             info => { PostCardItemApi.UpdatePostCardProcessStatus(postCardInfo.PostCardId, "SUBMIT_FAILURE"); });
            }

            MoveToNextPosition(rowHandler);
        }