600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 金蝶云星空API调用实践

金蝶云星空API调用实践

时间:2020-02-08 04:43:37

相关推荐

金蝶云星空API调用实践

SDK的方式没法在NetCore平台中使用。所以就采用了最原始的HTTP访问调用来实现,具体如下:

1、设定接口IK3CloudApi,IAfterK3CloudApi(有需要的可以自行扩展与实现)

public interface IK3CloudApi{/// <summary>/// 开启新实例/// </summary>/// <returns></returns>IK3CloudApi StartNew();/// <summary>/// 执行保存/// </summary>/// <returns></returns>IK3CloudApi Save(string formid, string data);/// <summary>/// 执行保存/// </summary>/// <returns></returns>IK3CloudApi Save<T>(string formid, SaveParam<T> data, JsonSerializerSettings jsonSerializerSettings = default) where T : class;/// <summary>/// 执行保存/// </summary>/// <returns></returns>IK3CloudApi BatchSave(string formid, string data);/// <summary>/// 执行保存/// </summary>/// <returns></returns>IK3CloudApi BatchSave<T>(string formid, BatchSaveParam<T> data, JsonSerializerSettings jsonSerializerSettings = default) where T : class;/// <summary>/// 执行审核/// </summary>/// <returns></returns>IK3CloudApi Audit(string formid, string data);/// <summary>/// 执行审核/// </summary>/// <returns></returns>IK3CloudApi Audit(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行反审核/// </summary>/// <returns></returns>IK3CloudApi UnAudit(string formid, string data);/// <summary>/// 执行反审核/// </summary>/// <returns></returns>IK3CloudApi UnAudit(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行提交/// </summary>/// <returns></returns>IK3CloudApi Submit(string formid, string data);/// <summary>/// 执行提交/// </summary>/// <returns></returns>IK3CloudApi Submit(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行删除/// </summary>/// <returns></returns>IK3CloudApi Delete(string formid, string data);/// <summary>/// 执行删除/// </summary>/// <returns></returns>IK3CloudApi Delete(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行下推/// </summary>/// <returns></returns>IK3CloudApi Push(string formid, string data);/// <summary>/// 执行下推/// </summary>/// <returns></returns>IK3CloudApi Push(string formid, PushParam data, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行操作/// </summary>/// <returns></returns>IK3CloudApi ExcuteOperation(string formid, string opNumber, string data);/// <summary>/// 随后执行/// </summary>/// <returns></returns>IAfterK3CloudApi After();/// <summary>/// 执行/// </summary>/// <param name="resultCallback">回调方法</param>/// <returns></returns>Task<MessageResult> SendAsync(Func<CloudCallBack, bool> resultCallback = null);/// <summary>/// 执行/// </summary>/// <param name="resultCallback">回调方法</param>/// <returns></returns>MessageResult Send(Func<CloudCallBack, bool> resultCallback = null);}

其中随后执行是为了满足 单据审核时 需要先调用提交动作 而产生的,具体如下:

随后执行 目前只支持通过formid的操作,也就是只能操作同一个类型的单据/档案

public interface IAfterK3CloudApi{/// <summary>/// 执行保存/// </summary>/// <returns></returns>IK3CloudApi Save(string data = null);/// <summary>/// 执行保存/// </summary>/// <returns></returns>IK3CloudApi Save(string formid, string data = null);/// <summary>/// 执行审核/// </summary>/// <returns></returns>IK3CloudApi Audit(string data = null);/// <summary>/// 执行反审核/// </summary>/// <returns></returns>IK3CloudApi UnAudit(string data = null);/// <summary>/// 执行提交/// </summary>/// <returns></returns>IK3CloudApi Submit(string data = null);/// <summary>/// 执行删除/// </summary>/// <returns></returns>IK3CloudApi Delete(string data = null);/// <summary>/// 执行操作/// </summary>/// <returns></returns>IK3CloudApi ExcuteOperation(string opNumber, string data = null);/// <summary>/// 执行审核/// </summary>/// <returns></returns>IK3CloudApi Audit(Func<CloudOperationResult, string> func);/// <summary>/// 执行反审核/// </summary>/// <returns></returns>IK3CloudApi UnAudit(Func<CloudOperationResult, string> func);/// <summary>/// 执行提交/// </summary>/// <returns></returns>IK3CloudApi Submit(Func<CloudOperationResult, string> func);/// <summary>/// 执行删除/// </summary>/// <returns></returns>IK3CloudApi Delete(Func<CloudOperationResult, string> func);/// <summary>/// 执行下推/// </summary>/// <returns></returns>IK3CloudApi Push(Func<CloudOperationResult, string> func);/// <summary>/// 执行下推/// </summary>/// <returns></returns>IK3CloudApi Push(string data = null);/// <summary>/// 执行下推/// </summary>/// <returns></returns>IK3CloudApi Push(PushParam data = null, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行审核/// </summary>/// <returns></returns>IK3CloudApi Audit(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行反审核/// </summary>/// <returns></returns>IK3CloudApi UnAudit(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行提交/// </summary>/// <returns></returns>IK3CloudApi Submit(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = default);/// <summary>/// 执行删除/// </summary>/// <returns></returns>IK3CloudApi Delete(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = default);}

实现类如下:

1、AppSettings 是对接配置文件,有需要可以自行替换为IConfiguration获取

2、需要配置的有地址、用户名、密码、数据帐套,对应(urlValue,starryskyusername,starryskyuserpwd,starryskyid)这里我区分了测试环境与生产环境的取值

3、SendAsync与Send方法设置了processResultCallback的回调,传入Action与返回值,并要求回传True或者False。作用是多个动作执行过程中,返回True (默认值)则前面的动作执行失败后不执行后续动作

4、插入动作的那个方法如果参数有多个则自行在新增方法实现,

/// <summary>/// 云星空的API调用/// </summary>[Serializable]internal class K3CloudApi : IK3CloudApi{private readonly string LoginServiceName = "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUserEnDeCode";private readonly string ExceServiceName = "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.";private readonly AppConfigurationOption optionSetting = null;private readonly IHttpClientFactory httpClientFactory = null;private readonly List<ExecuteItem> executeList = null;private readonly AfterK3CloudApi afterK3CloudApi = null;private readonly string urlValue = string.Empty;private readonly string starryskyid = string.Empty;private readonly string starryskyusername = string.Empty;private readonly string starryskyuserpwd = string.Empty;private readonly ILogger logger;/// <summary>/// 构造函数/// </summary>/// <param name="appSettings"></param>/// <param name="httpClientFactory"></param>/// <param name="logger"></param>public K3CloudApi(IOptionsMonitor<AppConfigurationOption> appSettings, IHttpClientFactory httpClientFactory, ILogger logger): this(appSettings.CurrentValue, httpClientFactory, logger){this.optionSetting = appSettings.CurrentValue;}private K3CloudApi(AppConfigurationOption optionSetting, IHttpClientFactory httpClientFactory, ILogger logger){this.httpClientFactory = httpClientFactory;this.executeList = new List<ExecuteItem>();this.urlValue = optionSetting.erpurl;this.starryskyid = optionSetting.starryskyid;this.starryskyusername = optionSetting.starryskyusername;this.starryskyuserpwd = optionSetting.starryskyuserpwd;if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development"){this.urlValue = optionSetting.erpurlDevelopment;this.starryskyid = optionSetting.starryskyidDevelopment;this.starryskyusername = optionSetting.starryskyusernameDevelopment;this.starryskyuserpwd = optionSetting.starryskyuserpwdDevelopment;}if (this.urlValue.EndsWith("/") == false)this.urlValue += "/";this.afterK3CloudApi = new AfterK3CloudApi(this);this.logger = logger.ForContext<K3CloudApi>();}/// <summary>/// 开启新实例/// </summary>/// <returns></returns>public IK3CloudApi StartNew(){return new K3CloudApi(this.optionSetting, this.httpClientFactory, this.logger);}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi Save(string formid, string data){this.InsertAction(formid, "Save", data);return this;}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi Save<T>(string formid, T data){this.InsertAction(formid, "Save", JsonConvert.SerializeObject(data));return this;}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi BatchSave(string formid, string data){this.InsertAction(formid, "BatchSave", data);return this;}/// <summary>/// 执行审核/// </summary>/// <returns></returns>public IK3CloudApi Audit(string formid, string data){this.InsertAction(formid, "Audit", data);return this;}/// <summary>/// 执行反审核/// </summary>/// <returns></returns>public IK3CloudApi UnAudit(string formid, string data){this.InsertAction(formid, "UnAudit", data);return this;}/// <summary>/// 执行反审核/// </summary>/// <returns></returns>public IK3CloudApi Submit(string formid, string data){this.InsertAction(formid, "Submit", data);return this;}/// <summary>/// 执行删除/// </summary>/// <returns></returns>public IK3CloudApi Delete(string formid, string data){this.InsertAction(formid, "Delete", data);return this;}/// <summary>/// 执行下推/// </summary>/// <returns></returns>public IK3CloudApi Push(string formid, string data){this.InsertAction(formid, "Push", data);return this;}/// <summary>/// 执行操作/// </summary>/// <returns></returns>public IK3CloudApi ExcuteOperation(string formid, string opNumber, string data){this.InsertAction(formid, "ExcuteOperation", opNumber: opNumber, data: data);return this;}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi Save<T>(string formid, SaveParam<T> data, JsonSerializerSettings jsonSerializerSettings = null) where T : class{this.InsertAction(formid, "Save", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi BatchSave<T>(string formid, BatchSaveParam<T> data, JsonSerializerSettings jsonSerializerSettings = null) where T : class{this.InsertAction(formid, "BatchSave", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行审核/// </summary>/// <returns></returns>public IK3CloudApi Audit(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = null){this.InsertAction(formid, "Audit", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行反审核/// </summary>/// <returns></returns>public IK3CloudApi UnAudit(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = null){this.InsertAction(formid, "UnAudit", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行提交/// </summary>/// <returns></returns>public IK3CloudApi Submit(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = null){this.InsertAction(formid, "Submit", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行删除/// </summary>/// <returns></returns>public IK3CloudApi Delete(string formid, OperationParam data, JsonSerializerSettings jsonSerializerSettings = null){this.InsertAction(formid, "Delete", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行下推/// </summary>/// <returns></returns>public IK3CloudApi Push(string formid, PushParam data, JsonSerializerSettings jsonSerializerSettings = null){this.InsertAction(formid, "Push", JsonConvert.SerializeObject(data, jsonSerializerSettings));return this;}/// <summary>/// 执行/// </summary>/// <param name="resultCallback">回调方法</param>/// <returns></returns>public Task<MessageResult> SendAsync(Func<CloudCallBack, bool> resultCallback = null){return Task.FromResult(Send(resultCallback));}/// <summary>/// 执行/// </summary>/// <param name="resultCallback">回调方法</param>/// <returns></returns>public MessageResult Send(Func<CloudCallBack, bool> resultCallback = null){MessageResult loginTuple = Login();if (loginTuple.IsSuccess == false)return loginTuple;CloudOperationResult lastreponseEntity = null;Func<CloudCallBack, bool> defaultCallback = resultCallback ??= (t) => true;MessageResult messageResult = new(string.Empty);foreach (var tuple in executeList){object[] postContent = new object[2] { tuple.Formid, tuple.PostContent };if (lastreponseEntity != null){postContent[1] = tuple.Func?.Invoke(lastreponseEntity);postContent[1] ??= tuple.PostContent;}var successProcess = SafeDo(action: () => Request(string.Concat(ExceServiceName, tuple.Action), JsonConvert.SerializeObject(postContent), tuple.Formid),successCallback: (result) =>{var jsonObj = JObject.Parse(result);CloudOperationResult operationResult = JsonConvert.DeserializeObject<CloudOperationResult>(jsonObj["Result"].ToString());lastreponseEntity = operationResult;defaultCallback(new CloudCallBack(tuple.Formid, operationResult));bineCloudResult(operationResult);return true;},failCallback: (ex) => defaultCallback(new CloudCallBack(tuple.Formid, ex)));if (successProcess == false)break;}lastreponseEntity = null;if (executeList != null)executeList.Clear();return messageResult;}private bool SafeDo(Func<string> action, Func<string, bool> successCallback, Func<Exception, bool> failCallback){try{return successCallback(action());}catch (Exception ex){bool? flag = failCallback?.Invoke(ex);if (flag.GetValueOrDefault(true) == false)throw;}return true;}/// <summary>/// 登录/// </summary>/// <returns></returns>private MessageResult Login(){object[] paramslist = new object[] { this.starryskyid, EnDecode.Encode(this.starryskyusername), EnDecode.Encode(this.starryskyuserpwd), 2052 };string loginResult = Request(LoginServiceName, JsonConvert.SerializeObject(paramslist), "Login");var resultJson = JObject.Parse(loginResult);var resultType = resultJson["LoginResultType"].Value<int>();//登录结果类型等于1,代表登录成功if (resultType != 1)return new MessageResult(false, resultJson["Message"].Value<string>());return new MessageResult(true, string.Empty);}/// <summary>/// 执行请求/// </summary>/// <returns></returns>private string Request(string serviceName, string postContent, string formid){using HttpClient httpClient = this.httpClientFactory.CreateClient("k3cloudapi");Stopwatch stopwatch = Stopwatch.StartNew();httpClient.DefaultRequestHeaders.Add("Accept-Charset", Encoding.UTF8.HeaderName);JObject jObj = new();jObj.Add("format", 1);jObj.Add("useragent", "ApiClient");jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());jObj.Add("parameters", postContent);jObj.Add("timestamp", DateTime.Now);jObj.Add("v", "1.0");var buffer = Encoding.UTF8.GetBytes(jObj.ToString());var byteContent = new ByteArrayContent(buffer);byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");HttpRequestMessage httpRequestMessage = new HttpRequestMessage{Method = HttpMethod.Post,Content = byteContent,RequestUri = new Uri(new Uri(this.urlValue), string.Concat(serviceName, ".common.kdsvc"))};var requestMsg = httpClient.Send(httpRequestMessage);var responseString = requestMsg.Content.ReadAsStringAsync().GetAwaiter().GetResult();responseString = ValidateResult(responseString);stopwatch.Stop();using (LogContext.PushProperty("RequestBody", postContent))using (LogContext.PushProperty("ResponseBody", responseString))using (LogContext.PushProperty("serviceName", serviceName))using (LogContext.PushProperty("StatusCode", requestMsg.StatusCode.ToString()))using (LogContext.PushProperty("Formid", formid))using (LogContext.PushProperty("Consuming", stopwatch.Elapsed.TotalMilliseconds))this.logger.Information(messageTemplate: "{urlValue}", this.urlValue);return responseString;}/// <summary>/// 校验返回值/// </summary>/// <param name="responseText"></param>/// <returns></returns>private string ValidateResult(string responseText){if (responseText.StartsWith("response_error:"))return responseText.TrimStart("response_error:".ToCharArray());return responseText;}/// <summary>/// 插入动作/// </summary>private void InsertAction(string formid, string action, string data = ""){var lastItem = this.executeList.LastOrDefault();if (lastItem != null){if (string.IsNullOrEmpty(data))data = lastItem.PostContent;if (string.IsNullOrEmpty(formid))formid = lastItem.Formid;}ExecuteItem executeItem = new(action, formid: formid, opNumber: string.Empty, data: data);this.executeList.Add(executeItem);}/// <summary>/// 插入动作/// </summary>private void InsertAction(string formid, string action, string opNumber, string data = ""){var lastItem = this.executeList.LastOrDefault();if (lastItem != null){if (string.IsNullOrEmpty(data))data = lastItem.PostContent;if (string.IsNullOrEmpty(formid))formid = lastItem.Formid;}ExecuteItem executeItem = new(action, formid: formid, opNumber: opNumber, data: data);this.executeList.Add(executeItem);}/// <summary>/// 插入动作/// </summary>private void InsertAction(string formid, string action, Func<CloudOperationResult, string> func){var lastItem = this.executeList.LastOrDefault();if (lastItem != null){if (string.IsNullOrEmpty(formid))formid = lastItem.Formid;}ExecuteItem executeItem = new(action, formid: formid, opNumber: string.Empty, func: func);this.executeList.Add(executeItem);}/// <summary>/// 随后执行/// </summary>/// <returns></returns>public IAfterK3CloudApi After(){return this.afterK3CloudApi;}/// <summary>/// 之后执行/// </summary>private class AfterK3CloudApi : IAfterK3CloudApi{private readonly K3CloudApi cloudApi;/// <summary>/// 构造函数/// </summary>/// <param name="k3CloudApi"></param>internal AfterK3CloudApi(K3CloudApi k3CloudApi){this.cloudApi = k3CloudApi;}/// <summary>/// 执行审核/// </summary>/// <returns></returns>public IK3CloudApi Audit(string data = null){this.cloudApi.InsertAction(string.Empty, "Audit", data);return this.cloudApi;}/// <summary>/// 执行删除/// </summary>/// <returns></returns>public IK3CloudApi Delete(string data = null){this.cloudApi.InsertAction(string.Empty, "Delete", data);return this.cloudApi;}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi Save(string data = null){this.cloudApi.InsertAction(string.Empty, "Save", data);return this.cloudApi;}/// <summary>/// 执行提交/// </summary>/// <returns></returns>public IK3CloudApi Submit(string data = null){this.cloudApi.InsertAction(string.Empty, "Submit", data);return this.cloudApi;}/// <summary>/// 执行反审核/// </summary>/// <returns></returns>public IK3CloudApi UnAudit(string data = null){this.cloudApi.InsertAction(string.Empty, "UnAudit", data);return this.cloudApi;}/// <summary>/// 执行操作/// </summary>/// <returns></returns>public IK3CloudApi ExcuteOperation(string opNumber, string data = null){this.cloudApi.InsertAction(string.Empty, "ExcuteOperation", opNumber, data);return this.cloudApi;}/// <summary>/// 执行审核/// </summary>/// <returns></returns>public IK3CloudApi Audit(Func<CloudOperationResult, string> func){this.cloudApi.InsertAction(string.Empty, "Audit", func);return this.cloudApi;}/// <summary>/// 执行反审核/// </summary>/// <returns></returns>public IK3CloudApi UnAudit(Func<CloudOperationResult, string> func){this.cloudApi.InsertAction(string.Empty, "UnAudit", func);return this.cloudApi;}/// <summary>/// 执行提交/// </summary>/// <returns></returns>public IK3CloudApi Submit(Func<CloudOperationResult, string> func){this.cloudApi.InsertAction(string.Empty, "Submit", func);return this.cloudApi;}/// <summary>/// 执行删除/// </summary>/// <returns></returns>public IK3CloudApi Delete(Func<CloudOperationResult, string> func){this.cloudApi.InsertAction(string.Empty, "Delete", func);return this.cloudApi;}/// <summary>/// 执行保存/// </summary>/// <returns></returns>public IK3CloudApi Save(string formid, string data = null){this.cloudApi.InsertAction(formid, "Save", data);return this.cloudApi;}/// <summary>/// 执行下推/// </summary>/// <returns></returns>public IK3CloudApi Push(Func<CloudOperationResult, string> func){this.cloudApi.InsertAction(string.Empty, "Push", func);return this.cloudApi;}/// <summary>/// 执行下推/// </summary>/// <returns></returns>public IK3CloudApi Push(string data = null){this.cloudApi.InsertAction(string.Empty, "Push", data);return this.cloudApi;}/// <summary>/// 执行下推/// </summary>/// <returns></returns>public IK3CloudApi Push(PushParam data = null, JsonSerializerSettings jsonSerializerSettings = null){return this.Push(JsonConvert.SerializeObject(data, jsonSerializerSettings));}/// <summary>/// 执行审核/// </summary>/// <returns></returns>public IK3CloudApi Audit(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = null){return this.Audit(JsonConvert.SerializeObject(data, jsonSerializerSettings));}/// <summary>/// 执行反审核/// </summary>/// <returns></returns>public IK3CloudApi UnAudit(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = null){return this.Audit(JsonConvert.SerializeObject(data, jsonSerializerSettings));}/// <summary>/// 执行提交/// </summary>/// <returns></returns>public IK3CloudApi Submit(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = null){return this.Submit(JsonConvert.SerializeObject(data, jsonSerializerSettings));}/// <summary>/// 执行删除/// </summary>/// <returns></returns>public IK3CloudApi Delete(OperationParam data = null, JsonSerializerSettings jsonSerializerSettings = null){return this.Delete(JsonConvert.SerializeObject(data, jsonSerializerSettings));}}}

反馈消息实体如下:

1、K3ResponseEntity 构造函数实现了返回JSON的解析,目前只取了部分

/// <summary>/// 云星空反馈消息实体/// </summary>[Serializable]public sealed class CloudOperationResult{[JsonConstructor]public CloudOperationResult(string id, ReponseStatus repoStatus, string number, JArray needReturnData){this.Id = id; this.ResponseStatus = repoStatus;this.Number = number;this.NeedReturnData = needReturnData;}public string Id { get; private set; }[JsonProperty("ResponseStatus")]public ReponseStatus ResponseStatus { get; private set; }/// <summary>/// /// </summary>public JArray NeedReturnData { get; private set; }/// <summary>/// /// </summary>public string Number { get; private set; }/// <summary>/// /// </summary>[Serializable]public class ReponseStatus{[JsonConstructor]public ReponseStatus(int errorCode, int msgcode, bool issuccess, IEnumerable<ErrorsItem> errors, IEnumerable<SuccessItem> SuccessEntitys, IEnumerable<ErrorsItem> SuccessMessages){this.ErrorCode = errorCode;this.MsgCode = msgcode;this.IsSuccess = issuccess;this.Errors = errors;this.SuccessEntitys = SuccessEntitys;this.SuccessMessages = SuccessMessages;}public int ErrorCode { get; private set; }public int MsgCode { get; private set; }public bool IsSuccess { get; private set; }public IEnumerable<ErrorsItem> Errors { get; private set; }public IEnumerable<SuccessItem> SuccessEntitys { get; private set; }public IEnumerable<ErrorsItem> SuccessMessages { get; private set; }}/// <summary>/// /// </summary>[Serializable]public class ErrorsItem{[JsonConstructor]public ErrorsItem(string fieldname, string message, int dindex){this.FieldName = fieldname;this.Message = message;this.DIndex = dindex;}public string FieldName { get; private set; }public string Message { get; private set; }public int DIndex { get; private set; }}/// <summary>/// /// </summary>[Serializable]public class SuccessItem{[JsonConstructor]public SuccessItem(string id, string number, int dindex){this.Id = id;this.Number = number;this.DIndex = dindex;}public string Id { get; private set; }public string Number { get; private set; }public int DIndex { get; private set; }}}

/// <summary>/// /// </summary>[Serializable]class ExecuteItem{public ExecuteItem(){}public ExecuteItem(string action, string formid, string opNumber, string data): base(){this.Action = action;this.Formid = formid;this.PostContent = data;this.opNumber = opNumber;}public ExecuteItem(string action, string formid, string opNumber, Func<CloudOperationResult, string> func): base(){this.Action = action;this.Formid = formid;this.Func = func;this.opNumber = opNumber;}public string Formid { get; }public string Action { get; }public string PostContent { get; }public string opNumber { get; }public Func<CloudOperationResult, string> Func { get; }}

其他参数类:

/// <summary>/// 返回值/// </summary>[Serializable]public sealed class CloudCallBack{/// <summary>/// 消息结果/// </summary>internal CloudCallBack(string formId, CloudOperationResult result){this.FormId = formId;this.Result = result;}internal CloudCallBack(string formId, Exception exception){this.FormId = formId;this.Exception = exception;}public string FormId { get; private set; }public CloudOperationResult Result { get; private set; }public Exception Exception { get; private set; }}

public class BatchSaveParam<T> : SaveParamBase where T : class{public BatchSaveParam(List<T> model){this.Model = model;}public List<T> Model { get; set; }}public class OperationParam{public OperationParam(){this.Numbers = new List<string>();}public string Ids { get; set; }public string CreateOrgId { get; set; }public IList<string> Numbers { get; set; }}public class PushParam{public PushParam(){}public string Ids { get; set; }public string EntryIds { get; set; }public IList<string> Numbers { get; set; }public string RuleId { get; set; }public string TargetBillTypeId { get; set; }public int TargetOrgId { get; set; } = 0;public string TargetFormId { get; set; }public bool IsEnableDefaultRule { get; set; } = false;public bool IsDraftWhenSaveFail { get; set; } = false;[JsonProperty("CustomParams")]public CustomParams CustomParam { get; set; }public class CustomParams{public CustomParams(){this.QtyParams = new List<ListQtyParams>();}[JsonProperty("CustomParams")]public List<ListQtyParams> QtyParams { get; set; }}public class ListQtyParams{public int EntryID { get; set; }public double FQty { get; set; }}}public class SaveParam<T> : SaveParamBase where T : class{public SaveParam(T model){this.Model = model;}public T Model { get; set; }}public class SaveParamBase{public SaveParamBase(){this.NeedReturnFields = new List<string>();this.NeedUpdateFields = new List<string>();this.IsAutoSubmitAndAudit = false;}public IList<string> NeedReturnFields { get; set; }public IList<string> NeedUpdateFields { get; set; }public bool IsAutoSubmitAndAudit { get; set; }public bool IsDeleteEntry { get; set; } = false;public bool IsEntryBatchFill { get; set; } = true;public bool IsAutoAdjustField { get; set; } = false;public bool IsControlPrecision { get; set; } = false;}

登录时使用了DES加密了账号与密码,代码如下:

/// <summary>/// /// </summary>[Serializable]public class EnDecode{public static string Encode(object data){string result = string.Empty;try{byte[] inArray = null;int length = 0;using (DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider()){int arg_38_0 = dESCryptoServiceProvider.KeySize;using (MemoryStream memoryStream = new MemoryStream()){using (CryptoStream cryptoStream = new CryptoStream(memoryStream, dESCryptoServiceProvider.CreateEncryptor(Encoding.ASCII.GetBytes("KingdeeK"), Encoding.ASCII.GetBytes("KingdeeK")), CryptoStreamMode.Write)){using (StreamWriter streamWriter = new StreamWriter(cryptoStream)){streamWriter.Write(data);streamWriter.Flush();cryptoStream.FlushFinalBlock();streamWriter.Flush();inArray = memoryStream.GetBuffer();length = (int)memoryStream.Length;}}}}result = Convert.ToBase64String(inArray, 0, length);}catch (Exception ex){result = ex.Message;}return result;}}

在Startup注册:

//注入接口services.AddTransient<IK3CloudApi, K3CloudApi>();

调用如下:

/// <summary>/// 构造函数/// </summary>public PoorderService(IOptionsMonitor<AppSettings> appSettings, IFreeSql freeSql, IHttpClientFactory httpClientFactory, ILogger<PoorderService> logger, IK3CloudApi iK3CloudApi){this.optionSetting = appSettings.CurrentValue;this.logger = logger;this.freeSql = freeSql;this.httpClientFactory = httpClientFactory;this.iK3CloudApi = iK3CloudApi;}//采购订单审核时:MessageResult messageResult = await this.iK3CloudApi.Audit("PUR_PurchaseOrder", postJson).SendAsync();//采购订单提交&审核:MessageResult messageResult = await this.iK3CloudApi.Submit("PUR_PurchaseOrder", postJson).After().Audit().SendAsync();

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。