public Task <ExamineFlow> SaveExamineFlow(UserInfo user, string taskGuid, ExamineSubmitRequest examineSubmitRequest, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (examineSubmitRequest == null)
            {
                throw new ArgumentNullException(nameof(examineSubmitRequest));
            }
            var examineFlow = _mapper.Map <ExamineFlow>(examineSubmitRequest);

            examineFlow.ExamineStatus        = ExamineStatus.Examining;
            examineFlow.SubmitTime           = DateTime.Now;
            examineFlow.SubmitOrganizationId = user.OrganizationId;
            examineFlow.SubmitUserId         = user.Id;
            examineFlow.TaskGuid             = taskGuid;
            examineFlow.IsDeleted            = false;
            examineFlow.Id = Guid.NewGuid().ToString();

            return(Store.CreateExamineFlowAsync(examineFlow, cancellationToken));
        }
        public async Task <ResponseMessage> Submit(UserInfo user, [FromBody] ExamineSubmitRequest examineSubmitRequest)
        {
            ResponseMessage response = new ResponseMessage();

            try
            {
                Logger.Trace("收到提交审核请求(Submit),请求体为:\r\n" + (examineSubmitRequest != null ? JsonHelper.ToJson(examineSubmitRequest) : ""));
                var taskGuid = Guid.NewGuid().ToString();//生成一个任务guid
                var flow     = await _examineFlowManager.GetExamineFlow(examineSubmitRequest.ContentId, examineSubmitRequest.Action);

                if (flow != null)
                {
                    taskGuid = flow.TaskGuid;
                    Logger.Info("收到提交审核请求(Submit),已经存在对应的已经在审核中的审核流程,跳过本地流程保存,请求体为:\r\n" + (examineSubmitRequest != null ? JsonHelper.ToJson(examineSubmitRequest) : ""));
                }
                else
                {
                    await _examineFlowManager.SaveExamineFlow(user, taskGuid, examineSubmitRequest);
                }
                NameValueCollection nameValueCollection = new NameValueCollection();
                nameValueCollection.Add("appToken", "app:nwf");
                var nwf = CreateNwf(user.Id, taskGuid, examineSubmitRequest);
                Logger.Info("向NWF提交请求审核协议:\r\n{0}", JsonHelper.ToJson(nwf));
                string result = await _restClient.Post(ApplicationContext.Current.NWFUrl, nwf, "POST", nameValueCollection);

                Logger.Info("返回:\r\n{0}", result);
                var response2 = JsonHelper.ToObject <ResponseMessage>(result);
                if (response2.Code != "0")
                {
                    Logger.Error($"向NWF({ApplicationContext.Current.NWFUrl})发送审核流程请求失败,请求体为:\r\n{JsonHelper.ToJson(nwf)}");
                    return(response2);
                }
            }
            catch (Exception e)
            {
                response.Code    = ResponseCodeDefines.ServiceError;
                response.Message = e.ToString();
                Logger.Error($"用户{user?.UserName ?? ""}({user?.Id ?? ""})向审核中心提交审核(Submit)报错:\r\n{e.ToString()},\r\n请求体为:\r\n" + (examineSubmitRequest != null ? JsonHelper.ToJson(examineSubmitRequest) : ""));
            }
            return(response);
        }
        private NWF CreateNwf(string userId, string taskGuid, ExamineSubmitRequest examineSubmitRequest)
        {
            NWF nwf      = new NWF();
            var bodyinfo = new BodyInfoType();
            var header   = new HeaderType();

            bodyinfo.FileInfo = new List <FileInfoType>();

            nwf.BodyInfo = bodyinfo;
            nwf.Header   = header;

            header.TaskGuid       = taskGuid;
            header.ContentGuid    = examineSubmitRequest.ContentId;
            header.Action         = examineSubmitRequest.Action;
            header.SourceSystem   = examineSubmitRequest.Source;
            header.ExtraAttribute = new List <AttributeType>();

            bodyinfo.Priority = 0;
            bodyinfo.TaskName = examineSubmitRequest.TaskName;
            if (String.IsNullOrEmpty(bodyinfo.TaskName))
            {
                bodyinfo.TaskName = $"{examineSubmitRequest.ContentName}-{userId}";
            }
            var extra = new List <AttributeType>();

            extra.Add(new AttributeType {
                Name = "ContentType", Value = examineSubmitRequest.ContentType
            });
            extra.Add(new AttributeType {
                Name = "Desc", Value = examineSubmitRequest.Desc
            });
            extra.Add(new AttributeType {
                Name = "ContentName", Value = examineSubmitRequest.ContentName
            });
            bodyinfo.ExtraAttribute = extra;
            return(nwf);
        }